我有以下 PL/SQL 过程:
create or replace
PROCEDURE DboOpdracht2(
table_name_in IN VARCHAR2,
amount_rows_in IN NUMBER)
IS
insert_query VARCHAR2 (2000);
--cursors voor tabel layout
CURSOR table_cur IS
SELECT * FROM User_tab_cols
WHERE table_name = UPPER(table_name_in);
BEGIN
FOR COUNT IN 1 .. amount_rows_in
LOOP
BEGIN
insert_query := 'INSERT INTO ';
insert_query := insert_query || UPPER(table_name_in);
insert_query := insert_query || ' VALUES(';
--loop voor elke cursor om te vullen
FOR col IN table_cur
LOOP
--dbms_output.put_line(col.data_type);
CASE col.data_type
WHEN 'NUMBER' THEN
insert_query := insert_query || ' dbms_random.value(0, (power(10,'||col.data_precision||')-1)/power(10,'||col.data_scale||'))';
WHEN 'VARCHAR2' THEN
insert_query := insert_query || ' dbms_random.string(''A'',' || col.data_length || ')';
WHEN 'TIMESTAMP(6)' THEN
insert_query := insert_query || ' ' || current_timestamp;
ELSE
insert_query := insert_query || ' NULL ';
END CASE;
--add comma
insert_query := insert_query || ' ,';
END LOOP;
insert_query := SUBSTR(insert_query,1,LENGTH(insert_query)-1);
insert_query := insert_query || ' );';
dbms_output.put_line(insert_query);
EXECUTE IMMEDIATE insert_query;
insert_query := '';
--EXCEPTION
--WHEN OTHERS THEN
--dbms_output.put_line('Exception! Something went wrong.');
--insert_query:='';
END;
END LOOP;
COMMIT;
END;
在尝试使用 IN 值运行它时:
(AUTEUR , 10)
它给了我以下错误: ORA-00911: invalid character ORA-06512: at "SYSTEM.DBOOPDRACHT2", line 38 ORA-06512: at line 8
在第 38 行有一个打印显示我在循环中生成的 INSERT 语句:
INSERT INTO AUTEUR VALUES( dbms_random.value(0, (power(10,10)-1)/power(10,0)) , dbms_random.string('A',64) , dbms_random.string('A',255) , dbms_random.string('A',255) , dbms_random.string('A',2048) );
转储部分是,这个 INSERT 原样工作正常!,但是每当我添加该行时,整个过程都会出现问题:EXECUTE IMMEDIATE...
知道为什么这会导致问题,而如果单独运行实际字符串则根本没有问题?
在此先感谢,笑脸