試試這個。在這裏,您可以輸入所需的時間「ABC」的數量在運行時柱:
代碼:
declare
user_input number := #
var varchar2(10) := '''ABC''';
var1 varchar2(2000);
v_sql varchar2(1000);
v_res varchar2(4000);
begin
var1 := var;
for i in 1 .. user_input - 1 loop
var1 := var1 || ',' || var;
end loop;
var1 := LTRIM(RTRIM(var1, ','), ',');
--dbms_output.put_line(var1);
v_sql := 'select :var1 from dual';
--dbms_output.put_line(v_sql);
Execute immediate v_sql
into v_res
using var1;
dbms_output.put_line(v_res);
end;
演示:
SQL> declare
2
3 user_input number := #
4
5 var varchar2(10) := '''ABC''';
6 var1 varchar2(2000);
7 v_sql varchar2(1000);
8 v_res varchar2(4000);
9 begin
10
11 var1 := var;
12
13 for i in 1 .. user_input - 1 loop
14 var1 := var1 || ',' || var;
15 end loop;
16
17 var1 := LTRIM(RTRIM(var1, ','), ',');
18
19 --dbms_output.put_line(var1);
20
21 v_sql := 'select :var1 from dual';
22
23 --dbms_output.put_line(v_sql);
24
25 Execute immediate v_sql
26 into v_res
27 using var1;
28
29 dbms_output.put_line(v_res);
30
31 end;
32/
Enter value for num: 2
old 3: user_input number := #
new 3: user_input number := 2;
'ABC','ABC'
PL/SQL procedure successfully completed.
SQL>/
Enter value for num: 5
old 3: user_input number := #
new 3: user_input number := 5;
'ABC','ABC','ABC','ABC','ABC'
PL/SQL procedure successfully completed.
SQL>/
Enter value for num: 7
old 3: user_input number := #
new 3: user_input number := 7;
'ABC','ABC','ABC','ABC','ABC','ABC','ABC'
PL/SQL procedure successfully completed.
SQL>/
Enter value for num: 6
old 3: user_input number := #
new 3: user_input number := 6;
'ABC','ABC','ABC','ABC','ABC','ABC'
PL/SQL procedure successfully completed.
SQL>/
Enter value for num: 9
old 3: user_input number := #
new 3: user_input number := 9;
'ABC','ABC','ABC','ABC','ABC','ABC','ABC','ABC','ABC'
PL/SQL procedure successfully completed.
爲什麼你需要一個像這樣的事情嗎?無論如何,我會使用動態sql – Thomas
首先,如何將1列中的4列存儲在1個變量中?爲此,如果列是動態列,並且列是固定的,則只需要4個變量即可。 –
你可以創建一個循環,進入v_count並添加儘可能多的列,因爲你需要 – Thomas