首页 > 解决方案 > 如何在 PL/SQL 过程中插入 NULL 值?

问题描述

例如表 Foobars,

CREATE TABLE Foobars(
   foo NUMBER,
   bar NUMBER
);

如何在动态PL/SQL 过程中从变量插入NULL值?

DECLARE
   var_foo  NUMBER := 69;
   var_bar  NUMBER := NULL;
   l_insert_statement VARCHAR2(128);
BEGIN
   -- Assembles insert statement
   l_insert_statement :=
      'INSERT INTO Foobars VALUES (' ||
         var_foo || ', ' ||
         var_bar ||
      ');';
   -- Executes insert statement
   EXECUTE immediate (l_insert_statement);
END;
/

查询在“EXECUTE immediate...”行返回 ORA-00936:缺少表达式

标签: oracleplsql

解决方案


不要使用字符串连接在动态 SQL 中传递变量,将它们作为绑定变量传递(并删除;动态 SQL 字符串中的语句终止符):

DECLARE
   var_foo  NUMBER := 69;
   var_bar  NUMBER := NULL;
   l_insert_statement VARCHAR2(128);
BEGIN
   -- Assembles insert statement
   l_insert_statement := 'INSERT INTO Foobars VALUES (:1, :2)';
   -- Executes insert statement
   EXECUTE immediate l_insert_statement USING var_foo, var_bar;
END;
/

或者,在这种情况下,您不需要动态 SQL:

DECLARE
   var_foo  NUMBER := 69;
   var_bar  NUMBER := NULL;
BEGIN
   INSERT INTO Foobars VALUES (var_foo, var_bar);
END;
/

并且不需要 PL/SQL,只需使用简单的 SQL 语句即可:

INSERT INTO Foobars VALUES (69, NULL);

db<>在这里摆弄


推荐阅读