1
失敗,當執行PLSQL中的SQL語句INSERT語句在Oracle數據庫
DBMS_SQL.EXECUTE('insert into tablename VALUES(aNumber)');
它給出了一個ASCII字符錯誤。 並直接插入它時,它成功,並將其插入。
失敗,當執行PLSQL中的SQL語句INSERT語句在Oracle數據庫
DBMS_SQL.EXECUTE('insert into tablename VALUES(aNumber)');
它給出了一個ASCII字符錯誤。 並直接插入它時,它成功,並將其插入。
在PL/SQL,你可以直接寫INSERT
聲明。
DECLARE
tablevalue varchar2(200);
BEGIN
tablevalue := 'Hello World!';
INSERT INTO tablename
VALUES (tablevalue);
END;
您的聲明失敗,因爲這不是DBMS_SQL.EXECUTE
的工作方式。檢查文檔和示例:http://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_sql.htm#BABBFFFJ
根據參考文檔中給出的示例,您應該這樣做(首先準備語句,然後綁定變量然後運行它)。
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;
您可以使用它,然後像這樣
exec demo('something');
希望它可以幫助
請提供一個完整的例子。因爲它是'tablevalue'是一個無效的標識符,不能被插入。 –
右括號缺失。 – Toru
你爲什麼要使用DBMS_SQL?如果你真的需要動態SQL,EXECUTE IMMEDIATE似乎對於這樣一個簡單的任務更加明智的選擇。 –