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