感謝您看...創建簡單的PL/SQL變量 - 在使用可變WHERE子句
我已經花了幾個小時研究這個,我無法相信這是很難做到的PL/SQL的東西是TSQL簡單。
我有一個連接2個表的簡單查詢:
Select DISTINCT
to_char(TO_DATE('1899123000', 'yymmddhh24')+ seg.NOM_DATE, 'mm/dd/yyyy') AS "Record Date"
, cd.CODE
, EMP.ID
, EMP.SHORT_NAME
FROM
EWFM.GEN_SEG seg join EWFM.SEG_CODE cd ON seg.SEG_CODE_SK = cd.SEG_CODE_SK
join EMP on seg.EMP_SK = EMP.EMP_SK
where NOM_DATE = vMyDate;
我用蟾蜍日期點,我查詢針對Oracle數據庫雲服務器源。生成的查詢將被放入可視化工具(如QlikView或Tableau)中。我想創建一個簡單的變量來使用WHERE子句,就像你在代碼中看到的那樣。
在此示例中,NOM_DATE是一個整數,例如42793(2/27/2017),如您在第一行「記錄日期」中所見。這裏沒有新東西,不是很令人興奮......直到...我試圖創建一個變量來使查詢更具動態性。
我試過了這裏發現的令人驚訝的各種各樣的例子,都失敗了。如:
declare myDate number(8); Begin myDate := 42793;
--fail ORA-06550 INTO子句預計
variable nomDate NUMBER
DEFINE nomDate = 42793
EXEC : nomDate := ' & nomDate'
...where NOM_DATE = (& nomDate) ;
--ORA-00900:無效的SQL語句
和
variable nomDate NUMBER;
EXEC nomDate := 42793;
select count(DET_SEG_SK) from DET_SEG
where NOM_DATE = :nomDate;
--ORA-00900 :無效的SQL語句
以及更多..希望你明白了。我花了幾個小時研究了一個正確答案的計算器,但正如你所看到的,我在問你。從「Var」這樣的簡單聲明到更復雜的「DECLARE,BEGIN,SELECT INTO ....」到實際創建函數,使用遊標迭代輸出....我仍然無法在一個簡單的變量中使用Where子句。
請解釋我的方式錯誤。
--Forlorn SQL開發
首先,我假設你的意思是PL/SQL,而不是TSQL。其次,我試過你的第一個例子,我沒有看到問題;這個對我有用。所以我認爲這一定是非常簡單或非常奇怪的事情!你可以剪切/粘貼你的整個(第一個)例子嗎? – BobC
在PL/SQL裏(一個命名的包/過程/函數等),你可以在'declare'部分聲明變量,然後在任何你喜歡的地方引用它們。你的例子開始聲明mydate number(8);'沒有問題(只需要一個'end;'),我不明白它是如何給出'INTO子句是預期的',因爲它只適用於'select'語句。 'variable'和'define'語法實際來自SQL * Plus命令行工具,它由桌面應用程序以各種方式進行模擬,因此您可能需要解釋如何運行它。 –
我的猜測是問題不是變量聲明,而是報告輸出 - 類似http://stackoverflow.com/questions/351489/is-it-possible-to-output-a-select-state-from-a -pl-sql-block/351752 –