Oracle
 sql >> Base de données >  >> RDS >> Oracle

L'instruction INSERT en PL/SQL échoue dans la base de données Oracle

En PL/SQL, vous pouvez écrire le INSERT déclaration directement.

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

  INSERT   INTO tablename
         VALUES (tablevalue);
END;

Votre instruction échoue car ce n'est pas le cas DBMS_SQL.EXECUTE œuvres. Consultez la documentation et l'exemple :http:/ /docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_sql.htm#BABBFFFJ

Selon l'exemple donné dans la documentation de référence, vous devriez le faire comme ceci (d'abord vous préparez l'instruction, puis liez la variable et ensuite l'exécutez).

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;

Vous l'utilisez alors comme ceci

 exec demo('something');

J'espère que ça aide