包含if和else问题的pl/sql过程

vohkndzv  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(315)

我试图用存储过程执行if-else,结果出错了。有人能告诉我哪里出错了吗。

Create or replace procedure schoolstudents(
    LS1 OUT NUMBER,
    LS2 OUT NUMBER,
    tablename in VARCHAR2)
IS
 lname     VARCHAR2(128);
 schoolId  NUMBER;
 my_sql VARCHAR2(200);
BEGIN
  lname := tablename;
  schoolId := function(lname);
IF lname=0
  my_sql := 'Insert into sname values(''a'',''b'') RETURNING '||schoolId||', '||schoolId||' into :1, :2';
  EXECUTE IMMEDIATE my_sql RETURNING OUT LS1, LS2;
ELSE:
  EXECUTE IMMEDIATE my_sql RETURNING OUT LS1, LS2;

COMMIT;
END;
/
o4hqfura

o4hqfura1#

有很多问题。if语句的语法为

IF  <condition> THEN
       stuff;
   ELSE
       other stuff;
  END IF;

如果lname不为零,那么myu sql变量永远不会被赋值。
如果文字值要更改,请不要将其连接到sql中。使用绑定变量。否则,每个新的dml都必须进行硬解析,并导致性能问题。
lname被定义为varchar2,但是您将它与数字文本进行比较。
schoolid是一个数字,但您正在传递字符。
不需要使用execute immediate来执行这些操作。我不知道第二次执行应该是什么,但对于第一次,只需替换为:
(使用100200的示例值)

IF ...<whatever condition>... THEN
   LS1 :=  100;
   LS2 := 200;
    Insert into sname values( LS1,LS2);

如果您有要插入的值,那么您已经知道要返回什么。如果dml正在调用sequence.nexval或其他返回计算值/派生值的函数,则返回非常有用。
我强烈建议您阅读一些pl/sql教程。

相关问题