2016-09-16 63 views
0

我有一个代码块这样的:如何在Oracle PL/SQL中执行立即执行块内更新?

SELECT AF INTO JC FROM I_EAggr WHERE Name = 'SED' for Update ; 

这里,I_EAggr表将被动态调用和客户的具体名称栏会出现在所有客户端模式。

现在我需要在Execute Immediate中写下这个。 任何帮助将不胜感激。

在此先感谢。

回答

0

您可能需要像这样:

SQL> create table I_EAggr(name varchar2(16), af number); 

Table created. 

SQL> insert into I_EAggr values ('SED', 1); 

1 row created. 

SQL> DECLARE 
    2  vSQL   VARCHAR2(1000); 
    3  vName   VARCHAR2(16) := 'SED'; 
    4  vTableName  VARCHAR2(16) := 'I_EAGGR'; 
    5  vAF   VARCHAR2(16); 
    6 BEGIN 
    7  vSQL := 'select af from ' || vTableName || ' where name = ''' || vName || ''' for update'; 
    8 
    9  EXECUTE IMMEDIATE vSQL INTO vAF; 
10 END; 
11/

PL/SQL procedure successfully completed. 
+0

谢谢,其实我得到的错误是由于“”“的更新” ..它正在采取更新的命令,但下一行是不能够标识为SQL命令。 EXECUTE IMMEDIATE vSQL INTO JC; ...如果我将它作为''''更新'[四个单引号],它会识别下一个命令,但是对于更新会发生错误! –

+0

我不能完全理解;请发布您的实际代码和您正在使用的错误 – Aleksej

+0

基本上这条线在vSQL之后出现错误!编译错误是:错误(79,119):PLS-00103:遇到下列其中一项时遇到符号“”:*&= - +; at in是mod余数不是rem返回返回<>或!=或= => = <= <>和or like2 like4 likec介于using ||批量成员submultiset符号“”被忽略。 –