0

ユーザー自体から配列変数を受け入れる目的で、以下のようなものを探しています。以下のコードが間違っていることは知っていますが、それは私の要件を理解するためだけのものです。

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; 
/
4

1 に答える 1

1

PL/SQL を使用して実装するのは困難ですが、SQL Plus で置換変数を使用することはできます。

2 つの SQL スクリプトを作成します。最初は main.sql で、もう 1 つは 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 でプログラムに実装してみませんか? そうすると、よりリラックスできます。

参照: SQLPlus または PL/SQL でメニューを作成する方法

于 2013-08-16T08:53:47.420 に答える