簡體   English   中英

如何在oracle程序中傳遞日期參數?

[英]How to pass date parameter inside the oracle procedure?

以下是示例程序代碼,

create or replace procedure pro_test(start_date date, end_date date)
is 
begin

insert into test1 select col1, col2, col3 from main where range_date between start_date and end_date;

exception

< what are the exception I need to capture >

end;
/

Q1:這是直接在程序中傳遞日期的正確方法嗎? Q2:如果沒有,我可以在程序中傳遞varchar,來轉換聲明部分中的日期嗎? Q3:在運營商之間開始部分使用,我可以直接通過程序參數嗎?

在執行此過程時, exec pro_test('10102015','30102015'); 在句子之間我需要提到什么? start_date和end_date之間是否足夠或我需要屏蔽日期格式?

有人可以幫我清楚嗎?

Q1:這是直接在程序中傳遞日期的正確方法嗎?

是。

Q3:在運營商之間開始部分使用,我可以直接通過程序參數嗎?

不確定你的意思,但你的插入聲明沒問題。 您正在傳遞DATE作為參數並插入表中。

在我看來,所有這些都可以在純SQL中的單個INSERT..SELECT語句中完成。

insert into test1 
select col1, col2, col3 
from main 
where range_date 
between TO_DATE(<date_literal>,<format mask>)
and TO_DATE(<date_literal>,<format mask>);

更新每個OP的評論:

在執行此過程時,exec pro_test('10102015','30102015'); 在句子之間我需要提到什么? start_date和end_date之間是否足夠或我需要屏蔽日期格式?

'10102015'不是DATE,它是一個字符串文字。 您必須將其作為DATE傳遞,因此您必須使用正確格式掩碼的TO_DATEANSI Date文字,因為您沒有任何時間部分。 ANSI Date literal使用固定格式'YYYY-MM-DD'

例如,

使用TO_DATE

EXEC pro_test(TO_DATE('10102015','DDMMYYYY'),TO_DATE('30102015','DDMMYYYY'));

使用ANSI Date文字

EXEC pro_test(DATE '2015-10-10', DATE '2015-10-30');

Q1。 你需要說什么程序參數的輸入輸出的類型增加或 ),為你的程序是輸入:

create or replace procedure pro_test(start_date in date, end_date in date)

你手術中的其他一切都很好。

如果您需要格外謹慎,則應在pl / sql變量在SQL語句中使用它們時對其進行命名空間:

create or replace procedure pro_test(start_date date, end_date date)
is 
begin

  insert into test1
  select col1, col2, col3
  from main where range_date
  between pro_test.start_date and pro_test.end_date;
...

這可以防止SQL引擎“捕獲”變量,如果它們的名稱與引用表中的列相同。

通常你會看到人們試圖避免這種情況:

create procedure my_procedure (p_customer_id number)
...
where customer_id = p_customer_id

命名空間變量允許您保持更清晰的界面而不使用前綴。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM