![](/img/trans.png)
[英]How to pass parameters in exec Oracle procedure which has array parameter
[英]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_DATE或ANSI 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.