Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String Oracle PL SQL-获取字符串的值_String_Oracle_Plsql_Cursor - Fatal编程技术网

String Oracle PL SQL-获取字符串的值

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

我想显示一个游标变量的值,该变量是在连接两个字符串后派生的

下面是我正在使用的代码。我得到的输出是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 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;

如果要按名称访问光标列,可以查看以下内容: