PL / SQL中的INSERT语句在Oracle数据库中失败

时间:2013-05-30 13:30:31

标签: oracle plsql

使用

在PLSQL中执行SQL语句时
DBMS_SQL.EXECUTE('insert into tablename VALUES(aNumber)');

它给出了ASCII字符错误。 当直接插入它成功并插入它。

1 个答案:

答案 0 :(得分:7)

在PL / SQL中,您可以直接编写INSERT语句。

DECLARE
  tablevalue      varchar2(200);
BEGIN
  tablevalue := 'Hello World!';

  INSERT   INTO tablename
         VALUES (tablevalue);
END;

您的陈述失败,因为这不是DBMS_SQL.EXECUTE的工作方式。查看文档和示例:http://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_sql.htm#BABBFFFJ

根据参考文档中给出的示例,您应该这样做(首先准备语句,然后绑定变量然后运行它。)

CREATE OR REPLACE PROCEDURE demo(tablevalue IN varchar2) AS
    cursor_name INTEGER;
    rows_processed INTEGER;
BEGIN
    cursor_name := dbms_sql.open_cursor;
    DBMS_SQL.PARSE(cursor_name, 'INSERT INTO tablename VALUES(:x)',
                   DBMS_SQL.NATIVE);
    DBMS_SQL.BIND_VARIABLE(cursor_name, ':x', tablevalue);
    rows_processed := DBMS_SQL.EXECUTE(cursor_name);
    DBMS_SQL.CLOSE_CURSOR(cursor_name);
EXCEPTION
WHEN OTHERS THEN
    DBMS_SQL.CLOSE_CURSOR(cursor_name);
    raise;
END;

你使用它然后像这样

 exec demo('something');

希望有所帮助