我正在创建一个包含“x,y,z,z1 ... zn”列的动态查询,如下所示:
`TYPE VAR IS TABLE OF VARCHAR2(4000);
tNIVEL VAR;
t_local_code VAR;
tPERM VAR;
tVAL_PERM VAR;
temp1 VAR;
temp2 VAR;
temp3 VAR;
temp4 VAR;
temp5 VAR;
temp6 VAR;
temp7 VAR;
BEGIN
vQuery:='select z.nivel, y.cod_local_perm, z.permiso,y.valor_permiso valor_perm,';
FOR i IN 2 .. p_checkboxes.COUNT LOOP
IF i <> p_checkboxes.LAST THEN
vQuery:=vQuery||' fun_perm_perm('||p_checkboxes(i)||',c.cod_local_perm ),';
ELSE
vQuery:=vQuery||' fun_perm_perm('||p_checkboxes(i)||',c.cod_local_perm ) ';
END IF;
END LOOP;
from (select distinct level NIVEL,a.COD_MASTER , b.cod_local_perm, lpad(chr(9),level,chr(9)) || replace(replace(replace(A.nom_permiso, '' " '' ,null) ,chr(10),null),chr(13),null) PERM ';
vQuery:=vQuery||' from TABLE1 A, TABLE2 B
WHERE B.COD_MASTER_SAP = A.COD_MASTER_SAP
and B.TIPO_SAP =''SAP_VIEJO''
start with a.cod_master_sap_padre IS NULL
connect by prior a.COD_MASTER_SAP = a.cod_master_sap_padre ) z, sap_perm_revisar y
where y.id_det = '||p_checkboxes(1)||'
AND y.cod_local_perm = z.cod_local_perm
order by y.cod_local_perm';
END;
`
选择只是一个示例,为了向您显示我将根据复选框获得一个新列我的问题是当我执行查询时执行此操作:
EXECUTE IMMEDIATE vQuery
BULK COLLECT INTO tNIVEL,
tNIVEL ,
tPERM,
tVAL_perm,
temp1
...
tempn;
- 我需要声明我已选择的相同数量的复选框。
请帮帮我。
答案 0 :(得分:0)
如果列表没有(合理的)上限,我同意Justin。
如果它是一个定义良好的列表,如果列而不是太多,你也可以尝试生成一个SQL语句,它总是用虚拟值填充列表,如NULL。
想象一下以下3个总是返回3列的案例:
SELECT NULL, a2, a3 FROM myTable;
SELECT a1, a2, a3 FROM myTable;
SELECT a1, a2, NULL FROM myTable;