oracle - 如何在 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:缺少表达式。
解决方案
不要使用字符串连接在动态 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<>在这里摆弄
推荐阅读
- python - 使用 np.einsum 进行定点运算
- java - 使用 MediaRecorder 时出现 Android setNextOutputFile 问题
- powerbi - Power BI Force-Directed Graph 在应用筛选器或仅选择性应用筛选器时不显示数据
- pivot - pivot_longer 并将值转换为变量
- java - 由于错误元素存在问题,未为 Mapper 创建实现
- macos - 如何修复 VLC 3.0.16 上的 libarchive 编译错误
- flutter - 颤动火种卡向上滑动
- aws-lambda - 如何从命令行界面获取 aws api 网关端点 url
- python - numpy argmax 与 groupby
- kubernetes - 在 kubernetes 中验证 cronjob 中的数据时出错