我需要从双表生成多个列。要生成的列数由用户输入决定。如果输入为3则为“ABC”三次。如果是4那么应该从双重中选择4次'ABC'。 我尝试了联盟,但我试图找到更有效的方法。
DECLARE
v_value varchar2(10):='ABC'
v_count number:=3;
VAR varchar2(4000)
BEGIN
select 'ABC','ABC','ABC' INTO VAR FROM DUAL;
END;
答案 0 :(得分:0)
这是你的意思吗?
select RPAD('ABC',length('ABC')*3,'ABC') from dual
ABCABCABC
DECLARE
v_value varchar2(10):='ABC'
v_count number:=3;
VAR varchar2(4000)
BEGIN
select RPAD(v_value,length(v_value)*v_count,v_value) INTO VAR FROM DUAL;
END;
答案 1 :(得分:0)
你的问题不是很清楚。
您对结果值使用VARCHAR2(4000)
变量的事实让我认为您需要获得由字符串n
次串联组成的单个字符串;如果是这种情况,您不需要select ... from DUAL
,只需执行以下操作:
DECLARE
v_value varchar2(10):='ABC';
v_count number:=4;
VAR varchar2(4000);
BEGIN
VAR := rpad(v_value, length(v_value) * v_count, v_value);
dbms_output.put_line(VAR);
END;
/
ABCABCABCABC
但是你说你试过UNION
,这让我认为你需要获得具有相同值的n
行;在这种情况下,您可以尝试:
DECLARE
type yourResultType is table of varchar2(10);
v_value varchar2(10):='ABC';
v_count number:=4;
VAR yourResultType;
BEGIN
select v_value
bulk collect into VAR
from dual
connect by level <= v_count;
--
for i in VAR.first .. VAR.last loop
dbms_output.put_line(VAR(i));
end loop;
END;
/
ABC
ABC
ABC
ABC
答案 2 :(得分:0)
试试这个。在这里你可以输入次数&#39; ABC&#39;在运行时需要作为列:
代码:
<?xml version="1.0" ?><graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.1/graphml.xsd">
演示:
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;