拆分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块:
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也是动态的,因为在运行块之前表不存在,因此无法编译.
注意:这是一个不寻常的要求:应用程序通常不应该创建表!