sql 存储过程中 如何使用declare 有的存储过程声明了,有的没有声明。请回答的详细点。。谢谢

sql 存储过程中 如何使用declare 有的存储过程声明了,有的没有声明。请回答的详细点。。谢谢,第1张

存储过程既可以有declare语句,也可以没有,declare声明的是一个语句块,是pl/sql执行的基本单位,

案例:一个基本的declare语句块

DECLARE

  e_invalid_department EXCEPTION -- 声明部分,给例外命名

BEGIN

  UPDATE departments

     SET department_name = 'Oracle Technology Center'

   WHERE department_id = 60

  IF SQL%NOTFOUND THEN

    RAISE e_invalid_department -- 程序执行部分,使用raise 语句显示抛出例外

  END IF

  COMMIT

EXCEPTION

  WHEN e_invalid_department THEN --例外处理部分,处理抛出的例外

    DBMS_OUTPUT.PUT_LINE('No such department id.')

END

一个简单的存储过程案例:

CREATE PROCEDURE query_emp(p_id     IN employees.employee_id%TYPE,

                           p_name   OUT employees.last_name%TYPE,

                           p_salary OUT employees.salary%TYPE,

                           p_comm   OUT employees.commission_pct%TYPE)

  AUTHID CURRENT_USER IS

BEGIN

  SELECT last_name, salary, commission_pct

    INTO p_name, p_salary, p_comm

    FROM employees

   WHERE employee_id = p_id

END query_emp

sql中declare是声明的意思,就是声明变量的,这个一般是用在函数和存储过程中的。比如说,这个存储过程是,只要你把学号输入进来,就能查询这个学生的班级。那么在这个存储过程里面, 学号就是参数。你给什么学号, 它就返回给你相应的班级。又或者你也可以做成, 只要你输入学号, 这个存储过程就会将这个学生删除。

mysql存储过程中,定义变量有两种方式:

1.使用set或select直接赋值,变量名以 @ 开头.

例如:set @var=1

可以在一个会话的任何地方声明,作用域是整个会话,称为会话变量。

2.以 DECLARE 关键字声明的变量,只能在存储过程中使用,称为存储过程变量,例如:

DECLARE var1  INT DEFAULT 0 

主要用在存储过程中,或者是给存储传参数中。

两者的区别是:

在调用存储过程时,以DECLARE声明的变量都会被初始化为 NULL。而会话变量(即@开头的变量)则不会被再初始化,在一个会话内,只须初始化一次,之后在会话内都是对上一次计算的结果,就相当于在是这个会话内的全局变量。

在存储过程中,使用动态语句,预处理时,动态内容必须赋给一个会话变量。

例:

set @v_sql= sqltext

PREPARE stmt FROM @v_sql 

EXECUTE stmt    

DEALLOCATE PREPARE stmt

有的时候在查询更新数据库的时候,需要多条语句的查询,因此需要多次修改

declare可以满足多次执行,但数据只修改一次。

declare @local_variable data_type

DECLARE: 定义变量,变量第一个字母是“@”

声明时需要指定变量的类型,

可以使用set和select对变量进行赋值,

在sql语句中就可以使用@local_variable来调用变量

声明中可以提供值,否则声明之后所有变量将初始化为NULL。

变量是在批处理或过程的主体中用 DECLARE 语句声明的,并用 SET 或 SELECT 语句赋值。游标变量可使用此语句声明,并可用于其他与游标相关的语句。所有变量在声明后均初始化为 NULL。 </IMG>Transact-SQL 语法约定</IMG>语法 DECLARE {{ @local_variable [AS] data_type } | { @cursor_variable_name CURSOR } | { @table_variable_name <table_type_definition >} } [ ,...n] <table_type_definition >::= TABLE ( { <column_definition >| <table_constraint >} [ ,... ] ) <column_definition >::= column_name { scalar_data_type | AS computed_column_expression } [ COLLATE collation_name ] [ [ DEFAULT constant_expression ] | IDENTITY [ ( seed,increment ) ] ] [ ROWGUIDCOL ] [ <column_constraint >] <column_constraint >::= { [ NULL | NOT NULL ] | [ PRIMARY KEY | UNIQUE ] | CHECK ( logical_expression ) } <table_constraint >::= { { PRIMARY KEY | UNIQUE } ( column_name [ ,... ] ) | CHECK ( search_condition ) }


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/6787044.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-28
下一篇2023-03-28

发表评论

登录后才能评论

评论列表(0条)

    保存