【问题标题】:Oracle PL SQL - Getting the value of stringOracle PL SQL - 获取字符串的值
【发布时间】:2014-04-29 16:54:47
【问题描述】:

我想显示一个游标变量的值,它是在连接 2 个字符串后得出的。

下面是我正在使用的代码。我得到的输出为 810 和 current_row.ORGN_CNSL_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

【问题讨论】:

标签: string oracle plsql cursor


【解决方案1】:

您不能直接通过变量名访问变量。 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;

【讨论】:

    猜你喜欢
    • 2013-03-24
    • 2014-10-19
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    • 2014-02-28
    相关资源
    最近更新 更多