拆分 SQL 语句以发送到 Oracle ADO.NET 客户端的正确方法是什么?例如,假设您在文本文件中有以下代码并且想要执行这些语句:
CREATE TABLE foo (bar VARCHAR2(100));
INSERT INTO foo (bar) VALUES('one');
INSERT INTO foo (bar) VALUES('two');
我相信尝试在一个命令中发送所有这些内容会导致 Oracle 抱怨“;”。我的第一个想法是在“;”上分开字符,并一次发送一个。
但是,存储过程也可以包含分号,那么我该如何制作以便分割例程将整个存储过程保持在一起呢?它是否还需要查找开始/结束语句,或者“/”?
ODP.NET 和 Microsoft Oracle Provider 在这些方面有什么区别吗?
如果没有 DDL,您可以通过用 BEGIN 和 END 包围语句来创建匿名 PL/SQL 块:
BEGIN
INSERT INTO foo (bar) VALUES('one');
INSERT INTO foo (bar) VALUES('two');
END;
要执行 DDL(如 CREATE TABLE),您需要使用动态 PL/SQL:
BEGIN
EXECUTE IMMEDIATE 'CREATE TABLE foo (bar VARCHAR2(100))';
EXECUTE IMMEDIATE 'INSERT INTO foo (bar) VALUES(:v)' USING 'one';
EXECUTE IMMEDIATE 'INSERT INTO foo (bar) VALUES(:v)' USING 'two';
END;
插入也是动态的,因为在运行块之前该表不存在,因此它将无法编译。
注意:这将是一个不寻常的要求:应用程序通常不应创建表!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)