W PL/SQL możesz napisać INSERT
oświadczenie bezpośrednio.
DECLARE
tablevalue varchar2(200);
BEGIN
tablevalue := 'Hello World!';
INSERT INTO tablename
VALUES (tablevalue);
END;
Twoja instrukcja nie powiedzie się, ponieważ nie w ten sposób DBMS_SQL.EXECUTE
Pracuje. Zapoznaj się z dokumentacją i przykładem:http:/ /docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_sql.htm#BABBFFFJ
Zgodnie z przykładem podanym w dokumentacji referencyjnej należy to zrobić w ten sposób (najpierw przygotowujesz instrukcję, a następnie wiążesz zmienną, a następnie ją uruchamiasz).
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;
Używasz go wtedy w ten sposób
exec demo('something');
Mam nadzieję, że to pomoże