String Oracle PL SQL-获取字符串的值
我想显示一个游标变量的值,该变量是在连接两个字符串后派生的 下面是我正在使用的代码。我得到的输出是810和String Oracle PL SQL-获取字符串的值,string,oracle,plsql,cursor,String,Oracle,Plsql,Cursor,我想显示一个游标变量的值,该变量是在连接两个字符串后派生的 下面是我正在使用的代码。我得到的输出是810和当前行.ORGN\u CNSL\u CD。我希望两个输出中的输出都是810 DECLARE temp varchar2(50); TYPE myARRAY is varray(20) of varchar2(60); TYPE myAssoARRAY is TABLE OF VARCHAR2(4000) INDEX BY VARCHAR2(15); DimensionKeys myARRA
当前行.ORGN\u CNSL\u CD
。我希望两个输出中的输出都是810
DECLARE
temp varchar2(50);
TYPE myARRAY is varray(20) of varchar2(60);
TYPE myAssoARRAY is TABLE OF VARCHAR2(4000) INDEX BY VARCHAR2(15);
DimensionKeys myARRAY := myARRAY('OrgnConfig','OrgnField','OrgnPstbl',
'OrgnBData','FundConfig','FundField',
'FundPstbl','FundBData');
DimensionValues myAssoARRAY;
CURSOR c_dist_perf_sumry IS
SELECT DISTINCT
PERFORMANCE_SUMMARY_STAGING.ORGN_CNSL_CD,
PERFORMANCE_SUMMARY_STAGING.FUND_CNSL_CD,
PERFORMANCE_SUMMARY_STAGING.ACTY_CNSL_CD,
PERFORMANCE_SUMMARY_STAGING.USERDM1_CNSL_CD
FROm PERFORMANCE_SUMMARY_STAGING
WHERE
ROWNUM=1;
BEGIN
DimensionValues('OrgnConfig') := 'ORGN_CNSL_SLCN_CD';
DimensionValues('OrgnField') := 'ORGN_CNSL_CD';
DimensionValues('OrgnPstbl') := 'PBLE_ORGN.ID';
DimensionValues('OrgnBData') := 'BDATA.BF_ORGN_ID';
DimensionValues('FundConfig') := 'FUND_CNSL_SLCN_CD';
DimensionValues('FundField') := 'FUND_CNSL_CD';
DimensionValues('FundPstbl') := 'PBLE_FUND.ID';
DimensionValues('FundBData') := 'BDATA.BF_FUND_ID';
FOR current_row IN c_dist_perf_sumry
LOOP
FOR i IN 1..8
LOOP
if MOD(I,4) = 1 THEN
temp := 'current_row' || '.' || DimensionValues(DimensionKeys(i+1));
DBMS_OUTPUT.PUT_LINE(current_row.ORGN_CNSL_CD);
DBMS_OUTPUT.PUT_LINE(temp);
END IF;
END LOOP;
END LOOP;
END;
/
set serveroutput on
810
current_row.ORGN_CNSL_CD
810
current_row.FUND_CNSL_CD
不能直接通过变量名访问变量。PL/SQL中没有反射,但您可以使用某种字典来做您想做的事情。大概是这样的:
DECLARE
TYPE myARRAY IS TABLE OF VARCHAR2(4000) INDEX BY VARCHAR2(60);
Dimensions myARRAY;
CURSOR c_dist_perf_sumry IS
SELECT '1' ORGN_CNSL_SLCN_CD,
'2' ORGN_CNSL_CD,
'3' PBLE_ORGN_ID,
'4' BDATA_BF_ORGN_ID,
'5' FUND_CNSL_SLCN_CD,
'6' FUND_CNSL_CD,
'7' PBLE_FUND_ID,
'8' BDATA_BF_FUND_ID
FROM dual
WHERE ROWNUM=1;
v_key VARCHAR2(60);
BEGIN
FOR r IN c_dist_perf_sumry LOOP
Dimensions('OrgnConfig') := r.ORGN_CNSL_SLCN_CD;
Dimensions('OrgnField') := r.ORGN_CNSL_CD;
Dimensions('OrgnPstbl') := r.PBLE_ORGN_ID;
Dimensions('OrgnBData') := r.BDATA_BF_ORGN_ID;
Dimensions('FundConfig') := r.FUND_CNSL_SLCN_CD;
Dimensions('FundField') := r.FUND_CNSL_CD;
Dimensions('FundPstbl') := r.PBLE_FUND_ID;
Dimensions('FundBData') := r.BDATA_BF_FUND_ID;
END LOOP;
FOR current_row IN c_dist_perf_sumry LOOP
v_key := Dimensions.first;
LOOP
EXIT WHEN v_key IS NULL;
DBMS_OUTPUT.PUT_LINE(current_row.ORGN_CNSL_CD);
DBMS_OUTPUT.PUT_LINE(Dimensions(v_key));
v_key := Dimensions.next(v_key);
END LOOP;
END LOOP;
END;
如果要按名称访问光标列,可以查看以下内容: