ORACLE:如何根据参数创建动态更新过程?

时间:2016-04-06 04:18:44

标签: oracle parameters procedure

我想更新过程,更新表的列取决于参数。

是否可以根据输入参数更新字段?

这是我所做的示例程序:

CREATE OR REPLACE PROCEDURE procedure(parameter in varchar2)
IS errormessage varchar2(255);
  BEGIN
  UPDATE table
SET table.parameter = 'newvalue'
END;

并且它不起作用。 请帮忙。

1 个答案:

答案 0 :(得分:0)

编辑:处理SQL注入方案。

您需要execute immediateparameter将用作列名。

注意:请记住,您正在运行更新语句而没有将更新所有行的where子句。

此外,您无法传递数字列名称,因为值newvalue是一个字符串。因此,如果要处理它,则在运行update语句之前使用if else条件并检查列数据类型。

CREATE OR REPLACE PROCEDURE proc12(column_name in varchar2)
IS
v_count integer;
  BEGIN
  select count(*) into v_count from (select column_name as txt from dual) where regexp_like (txt,'[,|=|;]');
  if v_count =0 then
  execute immediate 'UPDATE tbl1 SET '||column_name||' = ''newvalue''';
  else
  dbms_output.put_line('SQL Injection detected. Exiting');
 end if;
END;




select * from tbl1;

+------+
| col1 |
+------+
| abc  |
| pqr  |
| xyz  |
+------+

call proc12('col1');

select * from tbl1;

+----------+
|   col1   |
+----------+
| newvalue |
| newvalue |
| newvalue |
+----------+

call proc12('balance=10000, col1');
SQL Injection detected. Exiting