拆分 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 和 Micrsoft Oracle Provider 在这些方面有什么区别吗?
最佳答案
如果没有 DDL,您可以通过用 BEGIN 和 END 包围语句来创建匿名 PL/SQL block :
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;
INSERTS 也是动态的,因为表在运行 block 之前不存在,因此无法编译。
注意:这是一个不寻常的要求:应用程序通常不应创建表!
关于.net - 如何为 ADO.NET 拆分 Oracle sql 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/308963/