这让我发疯了。我想对列和变量进行简单的比较,但它不起作用。下面的代码中的QUERY 1在我做一个简单的选择时返回我的值,但我在第二个查询中使用结果变量它只是不起作用..
看起来很简单,但我已经花了好几个小时了。完整的sql proc是
令人困惑的是,如果我用一些硬编码的'Value'替换v_bbg_symbol(比如'FEDL01'),它会为查询2提供正确的答案,但是当我使用变量v_bbg_symbol时,它就不再起作用了
申报 v_bbg_symbol VARCHAR2(50); V_OLD_INS_NAME Varchar2(50);
Begin
--QUERY 1
SELECT BBG_SYMBOL into v_bbg_symbol FROM quotes_external WHERE ID = 1;
--Gives output - 'FEDL01'
DBMS_OUTPUT.PUT_LINE('I got here:'||v_bbg_symbol||' is my value');
-QUERY 2
SELECT NAME INTO V_OLD_INS_NAME FROM INSTRUMENT
JOIN CURVE_INSTRUMENT ON
INSTRUMENT.INSTRUMENT_ID = CURVE_INSTRUMENT.INSTRUMENT_ID
JOIN GENERIC_INSTRUMENT ON
CURVE_INSTRUMENT.GENERIC_INSTRUMENT_ID = GENERIC_INSTRUMENT.GENERIC_INSTRUMENT_ID
WHERE CURVE_INSTRUMENT.CURVE_SNAPSHOT_ID =
(SELECT MAX(CURVE_INSTRUMENT.CURVE_SNAPSHOT_ID) FROM CURVE_INSTRUMENT)
AND GENERIC_INSTRUMENT.INSTRUMENT_NAME = v_bbg_symbol;
--ORACLE ERROR 'No Data Found'
DBMS_OUTPUT.PUT_LINE('I got here:'||V_OLD_INS_NAME||' is the new value');
END;
第一个'SELECT'给出了我选择INTO变量'v_bbg_symbol'的值,但是当我在第二个QUERY中使用相同的变量'v_bbg_symbol'时,它假装没有传递任何值并且不返回任何结果。如果我在第二个QUERY中给出'v_bbg_symbol'的静态值,即(在这种情况下为'FEDL01'),结果会按预期进行。
请帮助..
答案 0 :(得分:0)
以下是您的查询,其中包含表别名以便于遵循它:
SELECT NAME INTO V_OLD_INS_NAME
FROM INSTRUMENT i JOIN
CURVE_INSTRUMENT ci
ON i.INSTRUMENT_ID = ci.INSTRUMENT_ID JOIN
GENERIC_INSTRUMENT gi
ON ci.GENERIC_INSTRUMENT_ID = gi.GENERIC_INSTRUMENT_ID
WHERE ci.CURVE_SNAPSHOT_ID = (SELECT MAX(ci.CURVE_SNAPSHOT_ID) FROM CURVE_INSTRUMENT ci) and
gi.INSTRUMENT_NAME = v_bbg_symbol;
这说明最大ci.curve_snapshot_id
不适用于与v_bbg_symbol
相关联的工具。我想你想要一个相关的子查询:
SELECT NAME INTO V_OLD_INS_NAME
FROM INSTRUMENT i JOIN
CURVE_INSTRUMENT ci
ON i.INSTRUMENT_ID = ci.INSTRUMENT_ID JOIN
GENERIC_INSTRUMENT gi
ON ci.GENERIC_INSTRUMENT_ID = gi.GENERIC_INSTRUMENT_ID
WHERE ci.CURVE_SNAPSHOT_ID = (SELECT MAX(ci2.CURVE_SNAPSHOT_ID)
FROM CURVE_INSTRUMENT ci2
WHERE ci2.instrument_id = i.instrument_id
) and
gi.INSTRUMENT_NAME = v_bbg_symbol;