我只是想阻止用户运行没有WHERE子句的UPDATE语句。我下面提供无效的SQL类型:sqlKind = UNINITIALIZED - PLSQL错误
create or replace PROCEDURE secure_update(update_query IN varchar2)
IS
msg varchar2(30000);
flag char(1);
qry varchar2(30000);
BEGIN
IF upper(update_query) LIKE 'UPDATE%SET%WHERE%=%' THEN
flag := '1';
ELSE
flag := '0';
END IF;
IF (flag = '1') THEN
--qry := update_query;
execute immediate update_query into msg;
END IF;
dbms_output.put_line(msg);
END;
这就是我如何执行它
EXEC secure_update
('
UPDATE dummy_table
SET col1 = ''whatever''
WHERE pk = ''1234''
')
我不断收到这个消息,我的PLSQL:
无效的SQL类型:sqlKind =未初始化
你能帮我找出如何克服这个呃ROR?
当使用'动态sql'时,尝试将varchar值放在两个两个引号内'''whatever'''我的意思是用''''''' – jfun
除了你看到的错误之外,不平衡单引号,而'exec'必须在一行,我不确定你的目标。如果你想检查一个'where'子句,所以调用者不能一次更新所有记录,是什么阻止他们做'where 1 = 1'? –
这个plsql用于实验目的。在这一点上我没有考虑安全 – user311509