Trong PL / SQL, bạn có thể viết INSERT
tuyên bố trực tiếp.
DECLARE
tablevalue varchar2(200);
BEGIN
tablevalue := 'Hello World!';
INSERT INTO tablename
VALUES (tablevalue);
END;
Câu lệnh của bạn không thành công vì đó không phải là cách DBMS_SQL.EXECUTE
làm. Xem tài liệu và ví dụ: http:/ /docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_sql.htm#BABBFFFJ
Theo ví dụ được đưa ra trong tài liệu tham khảo, bạn nên làm như thế này (đầu tiên bạn chuẩn bị câu lệnh, sau đó ràng buộc biến và sau đó chạy nó).
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;
Bạn sử dụng nó sau đó như thế này
exec demo('something');
Hy vọng nó sẽ hữu ích