[英]Send PL/SQL to Oracle without creating a stored procedure
我是PL / SQL Oracle的新手。 我曾经使用过JDBC框架和标准SQL。
例如,下一个PL / SQL:
IF EXISTS (SELECT * FROM Table1 WHERE Column1=’SomeValue’)
UPDATE Table1 SET (…) WHERE Column1=’SomeValue’
ELSE
INSERT INTO Table1 VALUES (…)
这句话必须从oracle中的存储过程中执行,因此您必须在数据库中创建一个过程并调用它,但是为什么我不能像“ select”语句那样将该句子发送到数据库并执行而不必创建首先是存储过程?
您可以使用可调用语句执行匿名PL / SQL块。 您将要使用预处理语句,因为它可以提高Oracle的性能并防止SQL注入。
PL / SQL块与BEGIN和END嵌套在一起,或者如果您具有局部变量,则与DECLARE / BEGIN / END嵌套在一起。
String plsqlBlock =
"begin " +
" update Table1 " +
" set val1 = :v1, val2 = :v2 " +
" where primary_key = :pk; " +
" if sql%rowcount = 0 then " +
" insert into Table1 (primary_key, val1, val2) " +
" values (:pk, :v1, :v2); " +
" end if; " +
"end;";
CallableStatement cs = connection.prepareCall(plsqlBlock);
cs.setInt("pk", 12345);
cs.setString("v1", "abc");
cs.setString("v2", "def");
cs.execute();
实际上,允许您使用客户端直接对数据库执行PL / SQL,并将代码嵌入“ begin ... end
”结构中。
例如,使用sqlplus
如下所示(永远不要忘记以/
-最后一行/第一个字符结尾的plsql语句):
begin
IF EXISTS (SELECT * FROM Table1 WHERE Column1=’SomeValue’)
THEN
UPDATE Table1 SET (…) WHERE Column1=’SomeValue’
;
ELSE
INSERT INTO Table1 VALUES (…)
;
END IF;
end;
/
(我为您的if / else
结构添加了正确的语法)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.