存储过程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