gpt4 book ai didi

oracle - Oracle中执行立即出错

转载 作者:行者123 更新时间:2023-12-01 22:24:24 24 4
gpt4 key购买 nike

我想通过游标执行以下命令,其中我在不同的表中具有列名称和列值。

但是脚本失败并显示以下错误消息。

ORA-00933: SQL 命令未正确结束

execute immediate 'UPDATE EMP_DETAILS_T SET ' || EMP_REC.COLUMN_NAME || ' = ' || '''' || EMP_REC.VALUE ||''' ' || ' where employee_id = ' || ''''|| EMP_REC.EMPLOYEE_ID || ''' '  ;

整个命令如下。

DECLARE 
CURSOR CR_EMP_ATT IS
SELECT COLUMN_NAME,
VALUE,
EMPLOYEE_ID
FROM UPDATE_DATA_T
WHERE EMPLOYEE_ID = P_EMP_ID;

BEGIN


FOR CR_EMP IN CR_EMP_ATT LOOP

BEGIN
EXECUTE IMMEDIATE 'Update EMP_DETAILS_T set ' || CR_EMP.COLUMN_NAME || ' = ' ||''''||CR_EMP.VALUE||''''|| ' where employee_id = ' ||''''|| P_EMP_ID||'''';
DBMS_OUTPUT.PUT_LINE('temp table updated');
END;

END LOOP;

END;

我已将此查询放入一个过程中,以便在员工需要时运行。

最佳答案

您的列包含包含单引号的值。 (&符号在这里不会成为问题)。您可以通过在执行前显示它来了解如何破坏该语句:

dbms_output.put_line('Update EMP_DETAILS_T set ' || CR_EMP.COLUMN_NAME
|| ' = ' ||''''||CR_EMP.VALUE||''''|| ' where employee_id = '
||''''|| P_EMP_ID||'''');

...这揭示了:

Update EMP_DETAILS_T set SOME_COLUMN = 'Standard & Poor's'  where employee_id  =  'ABC123'

...单引号不平衡;您甚至可以在语法突出显示中看到这一点。

最简单的解决方法是对两个值使用绑定(bind)变量(不能对列名使用绑定(bind)变量)并使用 USING 子句传递实际值:

EXECUTE IMMEDIATE 'Update EMP_DETAILS_T set ' || CR_EMP.COLUMN_NAME
|| ' = :VALUE where employee_id = :EMP_ID'
USING CR_EMP.VALUE, P_EMP_ID;

关于oracle - Oracle中执行立即出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28149228/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com