Oracle
 sql >> Datenbank >  >> RDS >> Oracle

INSERT-Anweisung in PL/SQL schlägt in Oracle-Datenbank fehl

In PL/SQL könnten Sie den INSERT schreiben Anweisung direkt.

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

  INSERT   INTO tablename
         VALUES (tablevalue);
END;

Ihre Anweisung schlägt fehl, weil dies nicht der Weg DBMS_SQL.EXECUTE ist funktioniert. Sehen Sie sich die Dokumentation und das Beispiel an:http:/ /docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_sql.htm#BABBFFFJ

Gemäß dem Beispiel in der Referenzdokumentation sollten Sie es so machen (zuerst bereiten Sie die Anweisung vor, dann binden Sie die Variable und führen Sie sie dann aus).

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;

Sie verwenden es dann so

 exec demo('something');

Hoffe es hilft