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