我正在嘗試在 TSQL 中做一些非常簡單的事情,但我完全堅持在 PlSQL 中做同樣的事情。
我想做與此等效的操作:-
declare @Today Date = GetDate();
declare @FirstDate Date;
declare @LastDate Date;
with cteStartDates as
(
Select START_DATE
From TABLE1
Union All
Select START_DATE
From TABLE2
)
Select @FirstDate = MIN(START_DATE),
@LastDate = DateAdd(Day, 1, @Today)
From cteStartDates;
基本上,我正在嘗試獲取開始日期和結束日期,其中開始日期是兩個表之一中第一條記錄的日期,結束日期是明天。然后我需要在一大堆后續查詢中使用@FirstDate 和@LastDate 作為引數。
我遇到了 PLSQL 的第一個障礙。我什至無法弄清楚如何做到這一點: -
declare @Today Date = GetDate();
我試過閱讀 Oracle 變數,但我并沒有真正理解它。我不明白 DEFINE、DECLARE 和 VARIABLE 之間的區別,無論我嘗試哪種方法,我似乎都無法讓它作業并不斷遇到我不太了解的問題。
例如(基于 Declare,但我也嘗試過使用 Define 和 Variable 進行以下所有操作),我已經嘗試將其作為實驗(為變數分配一個值,然后發出一個其他有效的查詢,該查詢甚至不使用該變數):-
Declare
v_Today Date;
Begin
Select sysdate into v_Today from dual;
Select ID From atable;
End;
這告訴我第二個選擇需要一個 Into 子句。我真的不明白為什么,我不想將 ID 分配給任何東西,我只是想選擇它。我已經看到了一些示例,這些示例暗示了 into 將定義列名(但我不確定我是否理解正確)。好的,我試過這個: -
Declare
v_Today Date;
Begin
Select sysdate into v_Today from dual;
Select ID into IDColumn From atable;
End;
這給了我一個錯誤,說識別符號 IDColumn 必須如此清楚地宣告,不能簡單地命名列。
從示例中我得到的印象是,開始和結束可能圍繞著變數,其中變數被分配了值,然后可以在腳本中稍后使用。所以我嘗試了這個: -
Declare
v_Today Date;
Begin
Select sysdate into v_Today from dual;
End;
Select v_Today from Dual;
這告訴我它遇到了關鍵字 Select,所以看來我不能簡單地用查詢來跟進宣告開始和結束塊。
一些示例似乎表明您可以分配一個變數,執行然后使用該變數。所以我嘗試自己執行 Declare/Begin/End Block - 這給了我訊息說它運行成功。然后我嘗試從 Dual 中執行隨后的 Select v_Today,v_Today 沒有被識別,所以很明顯我已經通過拆分執行而丟失了變數的值。
我覺得這應該很容易,但我顯然不明白。有人可以指出我正確的方向嗎?
編輯> 啊,終于想通了。我可以使用 Begin 和 end 中的變數,但我不能只在其中發出選擇。
uj5u.com熱心網友回復:
PL/SQL 塊用 BEGIN/END 關鍵字括起來。一旦你離開這個塊,你就結束了你的 PL/SQL 背景關系。并輸入不知道 PL/SQL 變數的普通 SQL 背景關系。
簡單來說:-)
這是正確的,你所學到的:
- 您需要將值選擇到變數中
- 變數必須在 PL/SQL 塊的 DECLARE 部分宣告
- 如果你想將一個變數回傳給客戶端——例如讓它顯示——你需要使用Oracle 的包dbms_output。
像這樣:
Declare
v_Today Date;
Begin
Select sysdate into v_Today from dual;
dbms_output.put_line(v_Today);
End;
在 PL/SQL 塊之前發出之前,你不會看到任何東西:
SET SERVEROUTPUT ON
此博客文章可以提供幫助:https ://blogs.oracle.com/connect/post/building-with-blocks Steve 為 PL/SQL 初學者發布了整個系列的文章。這只是第一個。
uj5u.com熱心網友回復:
Declare 部分中的變數可以在 Begin 和 End 塊中使用
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/487145.html
上一篇:gsed用帶單引號的變數$i替換
