存儲過程beginend
Ⅰ 請教存儲過程中begin/end的問題的相關推薦
#下面的代碼是對於從oracle的sqlplus返回變數值給shell的例子
output=`sqlplus -s unitele/lemontea << EOF
set heading off feedback off verify off
drop function test_get_param_value_p;
CREATE OR REPLACE function test_get_param_value_p
(
is_citycode in varchar2
)
return varchar2
is
on_value varchar2(100);
begin
on_value :='100000';
dbms_output.put_line(on_value);
dbms_output.put_line(is_citycode);
return on_value;
end;
/
select test_get_param_value_p('501') from al;
exit
EOF
`
echo "Oracle的輸出變數值:"$output
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++=
存儲過程 myproc(in_num in number,out_num out number)
sql腳本模板
先編輯一個mysql.sql文件,內容如下:
------------
var nret number;
execute :nret := 0;--初始化
call myproc(in_code,:nret)--執行存儲過程,in_code會被替換掉
/
select 'retcode[' || :nret || ']retcode' from al--顯示結果
/
quit;
-------------
SHELL腳本mysh.sh,內容如下
-------------
#./mysh.sh 123
cd /home/myshell
sed "s/in_code/$1/" mysql.sql > mysql01.sql
#根據sql腳本模板生成實際腳本
sqlplus usr/pwd@db result$1.txt
#執行sql腳本並把結果輸入result$1.txt
echo ok!
-------------
在LINUX下執行./mysh.sh 123,生成result123.txt,myproc輸出參數在'retcode['和']retcode'之間。
Ⅱ 一個簡單的oracle存儲過程的問題,begin和end之間具體能放那些東西
oracle存儲過程中,begin和end中存放的存儲過程的主體。
Oracle存儲過程基本語法 存儲過程:
CREATEORREPLACEPROCEDURE存儲過程名
IS
BEGIN
NULL;
END;
行1:
CREATE OR REPLACE PROCEDURE 是一個SQL語句通知Oracle資料庫去創建一個叫做skeleton存儲過程, 如果存在就覆蓋它;
行2:
IS關鍵詞表明後面將跟隨一個PL/SQL體。
行3:
BEGIN關鍵詞表明PL/SQL體的開始。
行4:
NULL PL/SQL語句表明什麼事都不做,這句不能刪去,因為PL/SQL體中至少需要有一句;
行5:
END關鍵詞表明PL/SQL體的結束
Ⅲ SQL中begin end 什麼意思怎麼用著條語句
一個個的回答的都所問非所答!!!
看來樓上的幾個自己估計都不是狠清楚,這樣就別回答別人,以免讓人家更迷糊.
我來回答lz吧
begin end是表示的一個語句塊,是T-SQL語言的一部分,類似於其他編程語言的大括弧{},如if(...){...}
在T-SQL中就是if(...)begin ... end
T-SQL語言它是用來讓應用程式與 SQL Server 溝通的主要語言.可以自己先查查這種語言,我就不多說了.
多數情況下T-SQL和存儲過程一起使用,希望幫助了你吧.
Ⅳ oracle 存儲過程 begin end
Oracle存儲過程基礎知識
商業規則和業務邏輯可以通過程序存儲在Oracle中,這個程序就是存儲過程。
存儲過程是SQL, PL/SQL, java 語句的組合,它使你能將執行商業規則的代碼從你的應用程序中移動到資料庫。這樣的結果就是,代碼存儲一次但是能夠被多個程序使用。
要創建一個過程對象(proceral object),必須有 CREATE PROCEDURE 系統許可權。如果這個過程對象需要被其他的用戶schema 使用,那麼你必須有 CREATE ANY PROCEDURE 許可權。執行 procere 的時候,可能需要excute許可權。或者EXCUTE ANY PROCEDURE 許可權。如果單獨賦予許可權,如下例所示:
grant execute on MY_PROCEDURE to Jelly
調用一個存儲過程的例子:
execute MY_PROCEDURE( 'ONE PARAMETER');
存儲過程(PROCEDURE)和函數(FUNCTION)的區別。
function有返回值,並且可以直接在Query中引用function和或者使用function的返回值。
本質上沒有區別,都是 PL/SQL 程序,都可以有返回值。最根本的區別是: 存儲過程是命令, 而函數是表達式的一部分。比如:
select max(NAME) FROM
但是不能 exec max(NAME) 如果此時max是函數。
PACKAGE是function,procere,variables 和sql 語句的組合。package允許多個procere使用同一個變數和游標。
創建 procere的語法:
CREATE [ OR REPLACE ] PROCEDURE [ schema.]procere
[(argument [IN | OUT | IN OUT ] [NO COPY] datatype
[, argument [IN | OUT | IN OUT ] [NO COPY] datatype]...
)]
[ authid { current_user | definer }]
{ is | as } { pl/sql_subprogram_body |
language { java name 'String' | c [ name, name] library lib_name
}]
Sql 代碼:
CREATE PROCEDURE sam.credit (acc_no IN NUMBER, amount IN NUMBER) AS
BEGIN
UPDATE accounts
SET balance = balance + amount
WHERE account_id = acc_no;
END;
可以使用 create or replace procere 語句, 這個語句的用處在於,你之前賦予的excute許可權都將被保留。
IN, OUT, IN OUT用來修飾參數。
IN 表示這個變數必須被調用者賦值然後傳入到PROCEDURE進行處理。
OUT 表示PRCEDURE 通過這個變數將值傳回給調用者。
IN OUT 則是這兩種的組合。
authid代表兩種許可權:
定義者許可權(difiner right 默認),執行者許可權(invoker right)。
定義者許可權說明這個procere中涉及的表,視圖等對象所需要的許可權只要定義者擁有許可權的話就可以訪問。
執行者許可權則需要調用這個 procere的用戶擁有相關表和對象的許可權。
Oracle存儲過程的基本語法
1. 基本結構
CREATE OR REPLACE PROCEDURE 存儲過程名字
(
參數1 IN NUMBER,
參數2 IN NUMBER
) AS
變數1 INTEGER :=0;
變數2 DATE;
BEGIN
END 存儲過程名字
2. SELECT INTO STATEMENT
將select查詢的結果存入到變數中,可以同時將多個列存儲多個變數中,必須有一條
記錄,否則拋出異常(如果沒有記錄拋出NO_DATA_FOUND)
例子:
BEGIN
SELECT col1,col2 into 變數1,變數2 FROM typestruct where xxx;
EXCEPTION
WHEN NO_DATA_FOUND THEN
xxxx;
END;
...
3. IF 判斷
IF V_TEST=1 THEN
BEGIN
do something
END;
END IF;
4. while 循環
WHILE V_TEST=1 LOOP
BEGIN
XXXX
END;
END LOOP;
5. 變數賦值
V_TEST := 123;
6. 用for in 使用cursor
...
IS
CURSOR cur IS SELECT * FROM xxx;
BEGIN
FOR cur_result in cur LOOP
BEGIN
V_SUM :=cur_result.列名1+cur_result.列名2
END;
END LOOP;
END;
7. 帶參數的cursor
CURSOR C_USER(C_ID NUMBER) IS SELECT NAME FROM USER WHERE TYPEID=C_ID;
OPEN C_USER(變數值);
LOOP
FETCH C_USER INTO V_NAME;
EXIT FETCH C_USER%NOTFOUND;
do something
END LOOP;
CLOSE C_USER;
8. 用pl/sql developer debug
連接資料庫後建立一個Test WINDOW
在窗口輸入調用SP的代碼,F9開始debug,CTRL+N單步調試
9. Pl/Sql中執行存儲過程
在sql*plus中:
declare
--必要的變數聲明,視你的過程而定
begin
execute yourprocure(parameter1,parameter2,...);
end
/
在SQL/PLUS中調用存儲過程,顯示結果:
SQL>set serveoutput on --打開輸出
SQL>var info1 number; --輸出1
SQL>var info2 number; --輸出2
SQL>declare
var1 varchar2(20); --輸入1
var2 varchar2(20); --輸入2
var3 varchar2(20); --輸入2
BEGIN
pro(var1,var2,var3,:info1,:info2);
END;
/
SQL>print info1;
SQL>print info2;
註:在EXECUTE IMMEDIATE STR語句是SQLPLUS中動態執行語句,它在執行中會自動提交,類似於DP中FORMS_DDL語句,在此語句中str是不能換行的,只能通過連接字元"||",或著在在換行時加上"-"連接字元。
Ⅳ 存儲過程創建多對BEGIN,END和一對BEGIN,END的區別
oracle存儲過程中,begin和end中存放的存儲過程的主體。Oracle存儲過程基本語法 存儲過程:CREATE OR REPLACE PROCEDURE 存儲過程名 IS BEGIN NULL; END;行1: CREATE OR REPLACE PROCEDURE 是一個SQL語句通知Oracle資料庫去創建一個叫做skeleton存儲過程, 如果存在就覆蓋它; 行2: IS關鍵詞表明後面將跟隨一個PL/SQL體。 行3: BEGIN關鍵詞表明PL/SQL體的開始。 行4: NULL PL/SQL語句表明什麼事都不做,這句不能刪去,因為PL/SQL體中至少需要有一句; 行5: END關鍵詞表明PL/SQL體的結束
Ⅵ sql server 中 begin end 是什麼意思
SQL Server中使用語言是T-SQL。在T-SQL中,Begin表示語句塊的開始;End表示語句塊的結束。Begin和End類似於C語言中表示語句塊的左花括弧{ 和右花括弧 }
例如
if@i>100--判斷
--如果條件成立,執行這個語句塊
begin
selete*fromDevieInfowhereDeviceId=@i
print'篩選完畢!'
end
else
--如果條件不成立,執行這個語句塊
begin
=@i
print'刪除完畢!'
end
Ⅶ db2創建存儲過程在begin和end中間有東西就報錯是什麼情況
因為在 Unix 平台下的 DB2 存儲過程對於實例用戶和受防護用戶之間的關系有一個約束,即 DB2 實例用戶必須同時是受防護用戶的主組中的一個用戶。
上述問題的發生就是由於在系統上,實例用戶未加入至受防護用戶的主組中,從而引發了存取許可權不夠的問題所導致的,而並非真的發生了如日誌中所報的磁碟錯誤。解決這一問題的方法很簡單,只要將實例用戶加入該主組即可。
但有時用戶會發現,即使已將用戶加入到指定組,問題仍然存在,這時還應檢查一下實例用戶所加入的組是否是實例用戶所對應的受防護用戶的主組,即檢查一下加入的組是否正確。
要找到實例用戶所應的受防護用戶以及受防護用戶的主組,可用如下方法:
轉入實例用戶 Home 路徑下的 sqllib/adm 路徑。
執行命令:ls -l .fenced,會得到類似如下輸出。
r--r--r-- 1 db2fencj db2fgrp2 0 Jul 30 09:57 .fenced。
輸出中表明,該文件所屬的用戶(db2fencj)即為受防護用戶,所屬的組(db2fgrp2)即為受防護用戶的主組
繼而,用戶便可驗證實例用戶是否被加入到了正確的組中,如果結果正確,便可以解決上述問題。
Ⅷ mysql存儲過程中begin和end之間很簡單的語句都報錯,什麼原因
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'while a<3 do
insert into drbd_t(hash,path) values(「abcd123456」, 「/192.168.' at line 1
mysql> set a=a+1;
ERROR 1193 (HY000): Unknown system variable 'a'
mysql> end while;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'end while' at line 1
Ⅸ 在SQL裡面寫存儲過程的時候 加「Begin End」和不加有什麼區別么
這個其實就是相當於你程序里的大括弧,用來識別你的代碼開始和結束的位置,方便分析器執行,如果你的代碼不多,不用begin
和end沒有什麼事情,如果是一個語句很多的存儲過程了,你要加上,不然系統會分辨不出來,就報錯了
Ⅹ 存儲過程 begin end
第一個begin--end是屬於if語句塊里的,相當於你編程裡面的大括弧,最後的return相當於else裡面的。
整個代碼其實如果滿足if()就返回1,否則返回-1