×

存储过程实例

存储过程实例(oracle存储过程实例 为什么 要INTO)

admin admin 发表于2023-12-05 15:38:35 浏览42 评论0

抢沙发发表评论

“存储过程实例”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看存储过程实例(oracle存储过程实例 为什么 要INTO)!

本文目录

oracle存储过程实例 为什么 要INTO

你说的是procedure或者function中的select 列 into 变量 from 。。。这种结构吧。这就是plsql的语法规则。不难理解,你在程序中从一张表中获取了某列或某些列的值,要想使用肯定要赋值给变量的,那么select 。。into 就是为了赋值而定义的一种语法。

存储过程的实例

数据库存储过程数据库存储过程的实质就是部署在数据库端的一组定义代码以及SQL。将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来,那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。利用SQL的语言可以编写对于数据库访问的存储过程,其语法如下:CREATE PROCASsql_statement 内的内容是可选项,而()内的内容是必选项,例:若用户想建立一个删除表tmp中的记录的存储过程Select_delete可写为:Create Proc select_del AsDelete tmp例:用户想查询tmp表中某年的数据的存储过程create proc select_query @year int asselect * from tmp where year=@year在这里@year是存储过程的参数例:该存储过程是从某结点n开始找到最上层的父亲结点,这种经常用到的过程可以由存储过程来担当,在网页中重复使用达到共享。空:表示该结点为顶层结点fjdid(父结点编号)结点n 非空:表示该结点的父亲结点号dwmc(单位名称) CREATE proc search_dwmc@dwidoldint,@dwmcresult varchar(100) outputasdeclare @stopintdeclare @result varchar(80)declare @dwmc varchar(80)declare @dwidintset nocountonset @stop=1set @dwmc=""select @dwmc = dwmc, @dwid = convert(int,fjdid) from jtdw where id = @dwidoldset @result = rtrim(@dwmc)if @dwid = 0set @stop = 0while(@stop = 1)and(@dwid《》0)beginset @dwidold = @dwidselect @dwmc = dwmc, @dwid = convert(int,fjdid) from jtdw where id = @dwidoldif @@rowcount = 0set @dwmc = ""elseset @result= @dwmc + @resultif(@dwid = 0) or (@@rowcount = 0)set @stop = 0elsecontinueendset @dwmcresult = rtrim(@result)使用execpro-nameSQL Server中存储过程sql语句执行的时候要先编译,然后执行。存储过程就是编译好了的一些sql语句。用的时候直接就可以用了。在SQL Server的查询分析器中,输入以下代码:declare @tot_amt intexecute order_tot_amt 1,@tot_amt outputselect @tot_amt以上代码是执行order_tot_amt这一存储过程,以计算出订单编号为1的订单销售金额,我们定义@tot_amt为输出参数,用来承接我们所要的结果。Oracle中的存储过程1.创建过程与其它的数据库系统一样,Oracle的存储过程是用PL/SQL语言编写的能完成一定处理功能的存储在数据库字典中的程序。语法:create procedure procedure_name type,argment type{ is | as }《类型.变量的说明》(注:不用 declare语句 )Begin《执行部分》exception《可选的异常处理说明》end;1.1 这里的IN表示向存储过程传递参数,OUT表示从存储过程返回参数。而IN OUT 表示传递参数和返回参数;1.2 在存储过程内的参数只能指定参数类型;不能指定长度;1.3 在AS或IS 后声明要用到的变量名称和变量类型及长度;1.4 在AS或IS 后声明变量不要加declare 语句。2.使用过程存储过程建立完成后,只要通过授权,用户就可以在SQLPLUS 、Oracle开发工具或第三方开发工具来调用运行。Oracle 使用CALL 语句来实现对存储过程的调用。语法:call procedure_name( parameter1, parameter2…);3.开发过程如今的几大数据库厂商提供的编写存储过程的工具都没有统一,虽然它们的编写风格有些相似,但由于没有标准,所以各家的开发调试过程也不一样。下面编写PL/SQL存储过程、函数、包及触发器的步骤如下:3.1 存储过程源码使用文字处理软件存储过程源码,要用类似WORD文字处理软件进行时,要将源码存为文本格式。3.2 对存储过程程序进行解释在SQLPLUS或用调试工具将 存储过程程序进行解释;在SQL》下调试,可用start 或get 等Oracle命令来启动解释。如:SQL》start c:\stat1.sql如果使用调试工具,可直接和点击相应的按钮即可生成存储过程。 3.3 调试源码直到正确我们不能保证所写的存储过程达到一次就正确。所以这里的调试是每个程序员必须进行的工作之一。在SQLPLUS下来调试主要用的方法是:1.使用 SHOW ERROR命令来提示源码的错误位置;2.使用 USER_ERRORS数据字典来查看各存储过程的错误位置。3.4 授权执行权给相关的用户或角色如果调试正确的存储过程没有进行授权,那就只有建立者本人才可以运行。所以作为应用系统的一部分的存储过程也必须进行授权才能达到要求。 在SQLPLUS下可以用GRANT命令来进行存储过程的运行授权。语法:GRANT system_privilege | role TO user | role | PUBLIC或GRANT object_privilege | ALL column ON schema.objectTO user | role | PUBLIC WITH GRANT OPTION其中system_privilege: 系统权限role: 角色名user: 被授权的用户名object_privilege: 所授予的权限名字,可以是ALTERDELETEEXECUTEINDEXINSERTREFERENCESSELECTUPDATEColumn: 列名schema: 模式名object: 对象名4.数据字典USER_SOURCE 用户的存储过程、函数的源代码字典DBA_SOURCE 整个系统所有用户的存储过程、函数的源代码字典ALL_SOURCE 当前用户能使用的存储过程(包括其她用户授权)、函数的源代码字典USER_ERRORS 用户的存储过程、函数的源代码存在错误的信息字典临时表(针对SQL2000/2005)可以创建本地和全局临时表。本地临时表仅在当前会话中可见;全局临时表在所有会话中都可见。本地临时表的名称前面有一个编号符 (#table_name),而全局临时表的名称前面有两个编号符 (##table_name)。SQL 语句使用 CREATE TABLE 语句中为 table_name 指定的名称引用临时表:CREATE TABLE #MyTempTable (cola INT PRIMARY KEY)INSERT INTO #MyTempTable VALUES (1)如果本地临时表由存储过程创建或由多个用户同时执行的应用程序创建,则 SQL Server 必须能够区分由不同用户创建的表。为此,SQL Server 在内部为每个本地临时表的表名追加一个数字后缀。存储在 tempdb 数据库的 sysobjects 表中的临时表,其全名由 CREATE TABLE 语句中指定的表名和系统生成的数字后缀组成。为了允许追加后缀,为本地临时表指定的表名 table_name 不能超过 116 个字符。除非使用 DROP TABLE 语句显式除去临时表,否则临时表将在退出其作用域时由系统自动除去:当存储过程完成时,将自动除去在存储过程中创建的本地临时表。由创建表的存储过程执行的所有嵌套存储过程都可以引用此表。但调用创建此表的存储过程的进程无法引用此表。所有其它本地临时表在当前会话结束时自动除去。全局临时表在创建此表的会话结束且其它任务停止对其引用时自动除去。任务与表之间的关联只在单个 Transact-SQL 语句的生存周期内保持。换言之,当创建全局临时表的会话结束时,最后一条引用此表的 Transact-SQL 语句完成后,将自动除去此表。

C#代码如何创建存储过程

存储过程: 固化在SQL数据库系统内部的SQL语句,这样做的好处是可以提高效率、体改数据库的安全性、减少网络流量。

1.打开SQL Server数据库,展开 “数据库”系欸但,找到使用的数据库(目标数据库),展开该数据库节点,找到 “可编程性” 节点并展开,就可以看到 “存储过程”,在 “存储过程”上点击右键,新建存储过程,然后会弹出查询分析器,在这输入创建代码就可以

create proc myinsert -- 创建一个存储过程,名称为myinsert--这里写参数,如果有的话;没有的话就空着as--这里写具体语句,可以写N个go--可加可不加,go的意思是另起一页,相当于下一个功能块。如果下边不写语句,可以不加!

View Code

代码实例

create proc myinsert@Name varchar(50)as insert into Student(Name)values(@Name)go

View Code

上面代码段的存储过程,可以向 Student表中插入一行数据。最后执行代码就能在 “存储过程”下保存次代码段,名为“myinsert”

上面提到的方法是手动创建一个存储过程的方法,还有另外一种方法,直接在 “新建查询”,打开查询分析器,然后在上边的语句中加入一句话:"use DataBaseName ” ,DataBaseName就是使用的数据库的名字,也就是在这个数据库中建立存储过程

例如:在Test数据库中,对Class表插入一行数据

use Testgocreate proc myclass    @Name varchar(30)asinsert into Class(Name)values(@Name)go

View Code

存储过程中也可以做 if 判断

USE @Name varchar(30),    @SName varchar(50)asif    @Name!=nullbegininsert into Class(Name)values(@Name)        returnendif    @SName!=nullbegininsert into Student(Name)values(@SName)    end

View Code

2.如何在C# 中调用存储过程

using System;using System.Collections.Generic;using System.Data;using System.Data.SqlClient;using System.Linq;using System.Text;using System.Threading.Tasks;namespace Stored_Procedures{    class Program{        static void Main(string args){            string strsql = "Data Source=hw-zhi-02;Initial Catalog=Test;Integrated Security=True";//数据库链接字符串string sql = "myclass";//要调用的存储过程名SqlConnection conStr = new SqlConnection(strsql);//SQL数据库连接对象,以数据库链接字符串为参数SqlCommand comStr = new SqlCommand(sql, conStr);//SQL语句执行对象,第一个参数是要执行的语句,第二个是数据库连接对象comStr.CommandType = CommandType.StoredProcedure;//因为要使用的是存储过程,所以设置执行类型为存储过程//依次设定存储过程的参数comStr.Parameters.Add("@Name", SqlDbType.Text).Value = "";comStr.Parameters.Add("@SName", SqlDbType.Text).Value = "Test";conStr.Open();//打开数据库连接//  MessageBox.Show(comStr.ExecuteNonQuery().ToString());//执行存储过程SqlDataAdapter SqlDataAdapter1 = new SqlDataAdapter(comStr);DataTable DT = new DataTable();SqlDataAdapter1.Fill(DT);conStr.Close();//关闭连接          }}}

View Code

最后跑程序,可以在对应数据库中找到添加的数据

有谁可以给个MySql的 Update的存储过程的例子,模板啊,坐等,在线

创建一个存储过来用来监控mysql的SELECT、INSERT、UPDATE、DELETE使用情况。## 创建存储过程pCheckDbStatus1()drop procedure if exists pCheckDbStatus1;delimiter //create procedure pCheckDbStatus1()beginSET @uptime=0;SET @com_select=0;SET @com_insert=0;SET @com_delete=0;SET @com_update=0;select @COM_DELETE:=variable_value FROM information_schema.GLOBAL_STATUS WHERE variable_name=’COM_DELETE’;select @COM_INSERT:=variable_value FROM information_schema.GLOBAL_STATUS WHERE variable_name=’COM_INSERT’;select @COM_SELECT:=variable_value FROM information_schema.GLOBAL_STATUS WHERE variable_name=’COM_SELECT’;select @COM_UPDATE:=variable_value FROM information_schema.GLOBAL_STATUS WHERE variable_name=’COM_UPDATE’;select @UPTIME:=variable_value FROM information_schema.GLOBAL_STATUS WHERE variable_name=’UPTIME’;INSERT INTO DbStatus1SELECTNOW(),(@com_select-com_select)/(@uptime-uptime),(@com_insert-com_insert)/(@uptime-uptime),(@com_update-com_update)/(@uptime-uptime),(@com_delete-com_delete)/(@uptime-uptime)FROM CheckDbStatus1 ORDER BY check_id DESC LIMIT 1;INSERT INTO CheckDbStatus1 VALUES (NULL,now(),@uptime,@com_select,@com_insert,@com_update,@com_delete);end;//delimiter ;存储过程中需要用到两张表,所以我们还需要建立两张表,如下:##创建表DbStatus1CREATE TABLE `DbStatus1` (`time` datetime NOT NULL DEFAULT ’0000-00-00 00:00:00’,`select_status` float DEFAULT NULL,`insert_status` float DEFAULT NULL,`update_status` float DEFAULT NULL,`delete_status` float DEFAULT NULL,PRIMARY KEY (`time`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;##创建表CheckDbStatus1CREATE TABLE `CheckDbStatus1` (`check_id` int(10) unsigned NOT NULL AUTO_INCREMENT,`time` datetime NOT NULL DEFAULT ’0000-00-00 00:00:00’,`uptime` int(10) unsigned DEFAULT NULL,`com_select` int(10) unsigned DEFAULT NULL,`com_insert` int(10) unsigned DEFAULT NULL,`com_update` int(10) unsigned DEFAULT NULL,`com_delete` int(10) unsigned DEFAULT NULL,PRIMARY KEY (`check_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Oracle 存储过程 数组做参数 求实例

packtest.test(v_string,v_int);你的v_string输入参数没有初始化。v_string system.packtest.string_array := system.packtest.string_array(’a’,’b’,’c’);

Oracle 求一存储过程带输入输出参数 并且调用的实例

下面的例子代码,  仅仅用于演示  in  out  ,  没有任何数据库检索的处理。

注:Oracle 的 IN OUT 写在变量名后面。SQL》 CREATE OR REPLACE PROCEDURE HelloWorld2 (  2    p_user_name IN     VARCHAR2,  3    p_out_val   OUT    VARCHAR2,  4    p_inout_val IN OUT VARCHAR2  5  ) AS  6  BEGIN  7     dbms_output.put_line(’Hello ’ || p_user_name || p_inout_val || ’!’);  8     p_out_val := ’A’;  9     p_inout_val := ’B’; 10  END HelloWorld2; 11  /Procedure created.SQL》 DECLARE  2    p_outval VARCHAR2(10);  3    p_inoutval VARCHAR2(10) := ’~Hi~’;  4  BEGIN  5    HelloWorld2(’Edward’, p_outval, p_inoutval);  6  7    dbms_output.put_line(’p_outval=’ || p_outval);  8    dbms_output.put_line(’p_inoutval=’ || p_inoutval);  9  END; 10  /Hello Edward~Hi~!p_outval=Ap_inoutval=BPL/SQL procedure successfully completed.SQL》

SQL存储过程实例

楼上的是ORACLE的存储过程语法,SQLSERVER的语法略有不同。举个例子:员工表(tb_employee)字段如下 emp_id 员工编号, emp_nm 员工姓名, dept_id 所属部门编号, salary 工资收入编写存储过程查询某部门员工的工资总和。那么分析可以知道,这个存储过程的输入参数就是部门编号create procedure sp_sum_salary@dept_id varchar(20)as--------直接以查询语句输出select sum(salary)from tb_employeewhere dept_id = @dept_id

以上就是我们为大家找到的有关“存储过程实例(oracle存储过程实例 为什么 要INTO)”的所有内容了,希望可以帮助到你。如果对我们网站的其他内容感兴趣请持续关注本站。