执行立即和SQL更新

时间:2014-05-09 16:24:43

标签: sql oracle

任何人都可以帮忙解决这个问题。我正在尝试使用与按钮关联的动态操作在APEX中执行此代码。只是尝试在表上进行简单的更新,但我的Pl / SQL很弱;)

DECLARE
sql_stmt VARCHAR2(200);
BEGIN
EXECUTE IMMEDIATE sql_stmt := 
'update dos_visits set visit_type = 'IMV'where     visit_type = 'SMV''
END;

我收到的错误=为此..

非常感谢!

1 个答案:

答案 0 :(得分:1)

在PL / SQL中,需要对字符串中的单引号进行转义,以便PL / SQL引擎知道您要指示是否存在单个引号而不是结束字符串。如果您想使用变量sql_stmt,您还需要在EXECUTE IMMEDIATE调用的单独步骤中为该变量指定值。

这将有效(请注意,这些是两个连续的单引号,而不是一个双引号字符)

DECLARE
  sql_stmt VARCHAR2(200);
BEGIN
  sql_stmt := 'update dos_visits set visit_type = ''IMV'' where visit_type = ''SMV''';
  EXECUTE IMMEDIATE sql_stmt; 
END;

但是,没有任何理由在这里使用动态SQL。使用静态SQL

通常更有意义
BEGIN
  update dos_visits 
     set visit_type = 'IMV' 
   where visit_type = 'SMV';
END;

如果您出于某种原因要使用动态SQL,您可能希望在查询中使用绑定变量,除非那些visit_type值确实是硬编码的。

DECLARE
  sql_stmt VARCHAR2(200);
BEGIN
  sql_stmt := 'update dos_visits set visit_type = :1 where visit_type = :2';
  EXECUTE IMMEDIATE sql_stmt 
    USING 'IMV', 'SMV'; 
END;