【问题标题】:oracle returning ID in execute immediate giving "missing keyword" errororacle 在执行时返回 ID 立即给出“缺少关键字”错误
【发布时间】:2015-12-01 10:33:36
【问题描述】:

下面是一个oracle程序

create or replace 
PROCEDURE INSERT_COMMON(
ENTITY_NAME IN VARCHAR2  
, INSERT_QUERY IN varchar2
) 
AS
NEW_ID NUMBER;
BEGIN
    -- execute insert
    DBMS_OUTPUT.PUT_LINE('INSERT_QUERY: ' || INSERT_QUERY);
    -- execute IMMEDIATE INSERT_QUERY returning ID into NEW_ID;
    -- above gives me a syntax error so using as below
    execute IMMEDIATE INSERT_QUERY || ' returning ID into NEW_ID';
    DBMS_OUTPUT.PUT_LINE('NEW_ID: ' || NEW_ID);

END INSERT_COMMON;

和我正在使用的 Pl/SQL

DECLARE
  ENTITY_NAME VARCHAR2(200);
  INSERT_QUERY VARCHAR2(200);
BEGIN
  ENTITY_NAME := 'company';
  INSERT_QUERY := 'INSERT INTO COMPANY (NAME) VALUES (''A  Company 2'')';

  INSERT_COMMON(ENTITY_NAME,INSERT_QUERY);
END;

这给了我以下错误

Error report:
ORA-00905: missing keyword
ORA-06512: at "SYSTEM.INSERT_COMMON", line 20
ORA-06512: at line 8
00905. 00000 -  "missing keyword"

但是,我已经测试过并且后续工作正常

DECLARE
  NEW_ID NUMBER;
BEGIN

  INSERT INTO COMPANY (NAME) VALUES ('A  Company 2') returning ID into NEW_ID;

  DBMS_OUTPUT.PUT_LINE('NEW_ID: ' || NEW_ID);

END;

【问题讨论】:

  • 对于初学者,在returning...的连接之前需要一个空格
  • 感谢您的指出,但这只是这里的语法错误,我已经纠正了那里,但仍然没有运气\

标签: oracle stored-procedures plsql sql-returning


【解决方案1】:

您需要在动态 sql 语句中指定要返回的绑定变量,但您还需要将 returning into <variable> 子句添加到立即执行语句中。

我相信(未经测试,因为您没有提供设置表和相关触发器的语句)以下应该对您的问题进行排序:

create or replace procedure insert_common (entity_name in varchar2,
                                           insert_query in varchar2)
as
  new_id number;
begin
  -- execute insert
  dbms_output.put_line ('INSERT_QUERY: ' || insert_query);

  -- above gives me a syntax error so using as below
  execute immediate insert_query || ' returning ID into :NEW_ID' returning into new_id;

  dbms_output.put_line ('NEW_ID: ' || new_id);
end insert_common;
/

【讨论】:

    猜你喜欢
    • 2021-05-26
    • 1970-01-01
    • 2020-12-20
    • 2010-09-23
    • 2023-03-22
    • 2013-01-02
    • 2015-04-13
    • 1970-01-01
    相关资源
    最近更新 更多