我正在寻找类似下面的内容,以便从用户自己接受数组变量,我知道下面的代码是错误的,但它只是为了给出我的要求的想法。
DECLARE
type names_array IS VARRAY(5) OF VARCHAR2(10);
names names_array;
BEGIN
FOR i in 1..5 LOOP
accept names(i);
END LOOP;
FOR j in 1 .. 5 LOOP
dbms_output.put_line(names(j));
END LOOP;
END;
/
答案 0 :(得分:1)
使用PL / SQL很难实现。但我们可以在SQL Plus中使用替换变量。
我创建了两个sql脚本: 第一个是main.sql,另一个是script_insert.sql:
[oracle@db input]$ cat main.sql
accept colu prompt "Please enter value, enter 'done' when no more values: "
set term off verify off
column script new_value v_script
select case '&colu'
when 'done' then ''
else '@script_insert &colu'
end as script
from dual;
set term on
@&v_script.
[oracle@db input]$
[oracle@db input]$ cat script_insert.sql
insert into array_table values ('&1');
@main
[oracle@db input]$
接下来我们应该创建一个表而不是使用数组:
SQL> create table array_table(colu varchar2(30));
Table created.
SQL>
现在,我们可以执行它:
SQL> @main
Please enter value, enter 'done' when no more values: A
1 row created.
Please enter value, enter 'done' when no more values: B
1 row created.
Please enter value, enter 'done' when no more values: Hello
1 row created.
Please enter value, enter 'done' when no more values: "Hello World"
1 row created.
Please enter value, enter 'done' when no more values: done
SQL> select * from array_table;
COLU
------------------------------
A
B
Hello
Hello World
SQL>
我们得到它,你应该使用除数组之外的表,因为只有PL / SQL支持它。你不应该在循环中使用替换变量! 最后,你为什么不在你的程序中用C / Python / Java实现这个?如果是这样,你会更放松。