oracle存储过程的创建和使用(oracle 创建存储过程 急啊)

2024-08-18 03:20:49 0

oracle存储过程的创建和使用(oracle 创建存储过程 急啊)

“oracle存储过程的创建和使用”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看oracle存储过程的创建和使用(oracle 创建存储过程 急啊)!

本文目录

oracle 创建存储过程 急啊

要知道创建存储过程使用pl/sql语言的而且end后面要加单引号;而且每个sql写完后也要加但引号标示在begin上面declare一个变量随便命名v_numnumber假设student表里面有一个变量是数字类型的叫number那么这个sql应该这样写createorreplaceproceduretestprocisdeclarev_numbernumber;beginselectnumberintov_numberfromstudent;end;

Oracle下怎样创建存储过程

给你示例你参考下:----------------------------建立存储过程:CREATE OR REPLACE PROCEDURE P_name--存储过程名字(i_var in int, --输入参数1o_var OUT varchar2 --输出参数1)ISv_STR VARCHAR2(200); --定义存储过程内部的局部变量BEGIN--下面是存储过程的主体实现部分 v_STR := i_var; dbms_output.put_line(v_STR); o_var := v_STR;exception--错误异常处理部分 when others then dbms_output.put_line(sqlerrm);--打印错误信息END P_name;-----------------------------------调用存储过程示例:declare v_in int; v_out varchar2(50);begin v_in :=100; P_name (v_in,v_out); --调用存储过程P_name dbms_output.put_line(’存储过程输入结果为:’||v_out);exception--错误异常处理部分 when others then dbms_output.put_line(sqlerrm);--打印错误信息end;

如何在Oracle中使用Java存储过程

通常有三种方法来创建java存储过程。

1. 使用oracle的sql语句来创建:

e.g. 使用create or replace and compile java source named "《name》" as

后边跟上java源程序。要求类的方法必须是public static的,才能用于存储过程。

SQL》 create or replace and compile java source named "javademo1" as import java.sql.*;  public class JavaDemo1  {  public static void main(String argv)  {  System.out.println("hello, java demo1");  }  }   /   Java 已创建。   SQL》 show errors java source "javademo1" 没有错误。   SQL》 create or replace procedure javademo1   as  language java name ’JavaDemo1.main(java.lang.String)’;   /   过程已创建。   SQL》 set serveroutput on SQL》 call javademo1();   调用完成。   SQL》 call dbms_java.set_output(5000);   调用完成。   SQL》 call javademo1();  hello, java demo1   调用完成。   SQL》 call javademo1();  hello, java demo1  调用完成。

2. 使用外部class文件来装载创建

e.g. 这里既然用到了外部文件,必然要将class文件放到oracle Server的某一目录下边。

public class OracleJavaProc  {      public static void main(String argv)      {          System.out.println("It’s a Java Oracle procedure.");      }  }    SQL》 grant create any directory to scott;   授权成功。   SQL》 conn scott/tiger@iihero.oracledb  已连接。  SQL》 create or   replace   directory   test_dir   as  ’d:/oracle’;   目录已创建。   SQL》 create or replace java class using bfile(test_dir, ’OracleJavaProc.CLASS’)    2  /   Java 已创建。   SQL》 create or replace procedure testjavaproc as language java name ’OracleJavaProc.main(java.lang.String)’;    2  /   过程已创建。   SQL》 call testjavaproc();   调用完成。   SQL》 execute testjavaproc;   PL/SQL 过程已成功完成。   SQL》 set serveroutput on size 5000  SQL》 call dbms_java.set_output(5000);   调用完成。   SQL》 execute testjavaproc;  It’s a Java Oracle procedure.

3. 我推荐的一种方法,直接使用loadjava命令远程装载并创建。先创建一个类, e.g.

import java.sql.*;  import oracle.jdbc.*;   public class OracleJavaProc {      //Add a salgrade to the database.     public static void addSalGrade(int grade, int losal, int hisal) {         System.out.println("Creating new salgrade for EMPLOYEE...");         try {           Connection conn =              DriverManager.getConnection("jdbc:default:connection:");            String sql =              "INSERT INTO salgrade " +              "(GRADE,LOSAL,HISAL) " +              "VALUES(?,?,?)";           PreparedStatement pstmt = conn.prepareStatement(sql);           pstmt.setInt(1,grade);           pstmt.setInt(2,losal);           pstmt.setInt(3,hisal);           pstmt.executeUpdate();           pstmt.close();           }        catch(SQLException e) {           System.err.println("ERROR! Adding Salgrade: "              + e.getMessage());           }     }  }

使用loadjava命令将其装载到服务器端并编译:

D:eclipse3.1workspacedbtest》loadjava -u scott/tiger@iihero.oracledb -v -resolve Or  

acleJavaProc.java  

arguments: ’-u’ ’scott/tiger@iihero.oracledb ’-v’ ’-resolve’ ’OracleJavaProc.java’  

creating : source OracleJavaProc  

loading  : source OracleJavaProc  

resolving: source OracleJavaProc  

查询一下状态:

连接到:  Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production  With the Partitioning, OLAP and Oracle Data Mining options  JServer Release 9.2.0.1.0 - Production   SQL》 SELECT object_name, object_type, status FROM user_objects WHERE object_type LIKE ’JAVA%’;   OBJECT_NAME  --------------------------------------------------------------------------------   OBJECT_TYPE                          STATUS  ------------------------------------ --------------  OracleJavaProc  JAVA CLASS                           VALID   OracleJavaProc  JAVA SOURCE                          VALID

测试一下存储过程:

SQL》 create or replace procedure add_salgrade(id number, losal number, hisal num  ber) as language java name ’OracleJavaProc.addSalGrade(int, int, int)’;    2  /   过程已创建。   SQL》 set serveroutput on size 2000  SQL》 call dbms_java.set_output(2000);   调用完成。   SQL》 execute add_salgrade(6, 10000, 15000);  Creating new salgrade for EMPLOYEE...   PL/SQL 过程已成功完成。   SQL》 select * from salgrade where grade=6;        GRADE      LOSAL      HISAL  ---------- ---------- ----------           6      10000      15000

怎样实现每天自动执行oracle的存储过程一次

用joboracle定时器调用存储过程

1、创建一个表,为了能清楚看到定时器的运行情况我们创建一个带有日期字段的表Sql代码  create table job_table(run_time date);  create table job_table(run_time date);

2、创建存储过程Sql代码  create or replace procedure job_proc is  begininsert into job_table (run_time) values (sysdate);   end;  create or replace procedure job_proc isbegininsert into job_table (run_time) values (sysdate);end;

3、创建job,并且指定为一分钟执行一次Sql代码  declarejob number;   begindbms_job.submit(job, ’job_proc;’, sysdate, ’TRUNC(sysdate,’’mi’’) + 1 / (24*60)’);   end/   commit;  declarejob number;begindbms_job.submit(job, ’job_proc;’, sysdate, ’TRUNC(sysdate,’’mi’’) + 1 / (24*60)’);end/commit;4.创建之后自动处于运行状态,我们查询job表,看看我们创建的jobSql代码  select job,broken,what,interval,t.* from user_jobs t;   select job,broken,what,interval,t.* from user_jobs t; job broken what interval ... 81 N job_proc; TRUNC(sysdate,’mi’) + 1 / (24*60) ...

用joboracle定时器调用存储过程

  1. 创建一个表,为了能清楚看到定时器的运行情况我们创建一个带有日期字段的表Sql代码  create table job_table(run_time date);  create table job_table(run_time date);2.创建存储过程Sql代码  create or replace procedure job_proc is  begininsert into job_table (run_time) values (sysdate);   end;  create or replace procedure job_proc isbegininsert into job_table (run_time) values (sysdate);end;

  2. 3.创建job,并且指定为一分钟执行一次Sql代码  declarejob number;   begindbms_job.submit(job, ’job_proc;’, sysdate, ’TRUNC(sysdate,’’mi’’) + 1 / (24*60)’);   end/   commit;  declarejob number;begindbms_job.submit(job, ’job_proc;’, sysdate, ’TRUNC(sysdate,’’mi’’) + 1 / (24*60)’);end/commit;4.创建之后自动处于运行状态,我们查询job表,看看我们创建的jobSql代码  select job,broken,what,interval,t.* from user_jobs t;   select job,broken,what,interval,t.* from user_jobs t; job broken what interval ... 81 N job_proc; TRUNC(sysdate,’mi’) + 1 / (24*60) ...

如何开发ORACLE存储过程

简单地讲,Oracle存储过程就是存储在Oracle数据库中的一个程序。 一. 概述 Oracle存储过程开发的要点是: · 使用Notepad文本器,用Oracle PL/SQL编程语言写一个存储过程; ·在Oracle数据库中创建一个存储过程; ·在Oracle数据库中使用SQL*Plus工具运行存储过程; ·在Oracle数据库中修改存储过程; · 通过编译错误调试存储过程; · 删除存储过程; 二.环境配置 包括以下内容: · 一个文本器Notepad; · Oracle SQL*Plus工具,提交Oracle SQL和PL/SQL 语句到Oracle database。 · Oracle 10g express数据库,它是免费使用的版本; 需要的技巧: · SQL基础知识,包括插入、修改、删除等 · 使用Oracle’s SQL*Plus工具的基本技巧; · 使用Oracle’s PL/SQL 编程语言的基本技巧; 三.写一个存储过程 存储过程使用Oracle’s PL/SQL 程序语言编写,让我们写一个什么工作都不做的存储过程,我们可以编译和运行它而不用担心会对数据库产生任何损害。 在Notepad, 写下: CREATE OR REPLACE PROCEDURE skeleton IS BEGIN NULL; END; 把文件存为skeleton.sql. 让我们一行行遍历这个存储过程: 1 CREATE OR REPLACE PROCEDURE skeleton 2 IS 3 BEGIN 4 NULL; 5 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语句CREATE OR REPLACE PROCEDURE在Oracle数据库中创建、编译和保存一个存储过程。 从Window打开SQL*Plus并且从SQL*Plus登录到你的数据库;打开skeleton.sql文件. 在SQL》命令提示符下输入以下命令: SQL》@skeleton SQL》/ SQL*Plus装载skeleton.sql文件的内容到SQL*Plus缓冲区并且执行SQL*Plus语句;SQL*Plus 会通知你存储过程已经被成功地创建。 现在你的存储过程被创建,编译和保存在你的Oracle数据库,我们可以运行它。 五.运行一个存储过程 从SQL*Plus 命令行提示符运行你的存储过程使用EXECUTE命令,如下: SQL》 EXECUTE skeleton; SQL*Plus 输出一下信息确信存储过程成功执行: PL/SQL procedure successfully completed. 你也可以在一个无名PL/SQL块内运行你的存储过程,在SQL*Plus命令提示符下,它看起来像: SQL》 BEGIN 2 SKELETON; 3 END; 4 / 现在我们已经运行了我们的存储过程,我们如何修改它呢? 六.修改一个存储过程 让我们写一个输出字符串“Hello World!”的存储过程,用Notepad打开你的skeleton.sql 文件,. 用DBMS_OUTPUT.PUT_LINE 过程调用去替换NULL语句,如下所示: CREATE OR REPLACE PROCEDURE skeleton IS BEGIN DBMS_OUTPUT.PUT_LINE(’Hello World!’); END; 保存到文件skeleton.sql. 从SQL*Plus命令行, 打开文件skeleton.sql . SQL》 @skeleton SQL》 1 CREATE OR REPLACE PROCEDURE skeleton 2 IS 3 BEGIN 4 DBMS_OUTPUT.PUT_LINE(’Hello World!’); 5* END; SQL》 / SQL*Plus 通知你存储过程成功创建并输出提示信息:Procedure created. SQL》 用EXECUTE 命令运行你的存储过程: SQL》 EXECUTE skeleton; SQL*Plus显示存储过程运行成功:PL/SQL procedure successfully completed. 我们想要的输出字符串 "Hello World!"没有出来,在显示一个DBMS_OUTPUT.PUT_LINE 结果前需要运行一个SET命令,在SQL*Plus 命令行提示符,键入: SQL》 SET SERVEROUTPUT ON 再次执行你的存储过程: SQL》 EXECUTE skeleton; 现在结果输出了:Hello World! PL/SQL procedure successfully completed. 七.调试一个存储过程 当调试一个存储过程时,遵循一样的步骤,修改SQL文件,创建存储过程,执行存储过程,根据编译器反馈的出错信息进行修改,这一步是非常繁琐的,需要依靠经验。 在实际的商用存储过程的开发调试过程中,由于涉及很多表、类型、光标、循环、条件等复杂的逻辑,和PL/SQL语句的灵活运用,编译时会产生很多错误提示信息,程序员在根据这些错误信息定位,进行修正,再编译最后得到正确的结构; 八.放弃一个存储过程 如果在数据库中你不在需要一个存储过程你可以删除它,SQL语句 DROP PROCEDURE 完成从数据库中删除一个存储过程,DROP PROCEDURE 在SQL中被归类为数据定义语言(DDL) 类操作,其他的例子有CREATE, ALTER, RENAME 和TRUNCATE。. 在SQL*Plus 命令提示符下,使用DROP PROCEDURE SQL 语句删除你的叫做skeleton的存储过程: SQL》 DROP PROCEDURE skeleton; SQL*Plus assures us the procedure has been removed: Procedure dropped. 总结 本文详细讨论了如何使用Oracle工具开发Oracle商用存储过程的步骤。最后在存储过程的使用中可能是程序直接调用,也可能被触发器调用。

急求!怎么建立oracle存储过程(实例)

--创建存储过程  IN_SHEETID 为输入参数CREATE OR REPLACE PROCEDURE ST_RECEIPT(IN_SHEETID VARCHAR2) ISBEGIN  --将 receipt0表中数据插入 receipt  INSERT INTO RECEIPT    SELECT * FROM RECEIPT0 WHERE SHEETID = IN_SHEETID;  --更新receipt表中Flag值  UPDATE RECEIPT SET FLAG = 100 WHERE SHEETID = IN_SHEETID;  --  INSERT INTO RECEIPTITEM    SELECT * FROM RECEIPTITEM0 WHERE SHEETID = IN_SHEETID;  --删除ReceiptItem0表数据  DELETE FROM RECEIPTITEM0 WHERE SHEETID = IN_SHEETID;  --删除 receipt0表数据  DELETE FROM RECEIPT0 WHERE SHEETID = IN_SHEETID;END;--调用存储过程BEGIN  ST_RECEIPT(’ys141128’);END;--或者EXEC ST_RECEIPT(’ys141128’);

怎么使用存储过程

问题一:SQL 中存储过程怎么使用? sql存储过程及应用 一、简介: 存储过程(Stored Procedure), 是一组为了完成特定功能的SQL 语句,集经编译后 存储在数据库中,用户通过指定存储过程的名字并给出参数,如果该存储过程带有参数来执行 它, 在SQL Server 的系列版本中,存储过程分为两类:系统提供的存储过程和用户自定义存储过程 。 系统SP,主要存储master 数据库中,并以sp_为前缀并且系统存储过程主要是从系统表中获取 信息,从而为系统管理员管理SQL Server。用户自定义存储过程是由用户创建,并能完成 某一特定功能,如:查询用户所需数据信息的存储过程。 存储过程具有以下优点 1.存储过程允许标准组件式编程(模块化设计) 存储过程在被创建以后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句,而 且数 据库专业人员可随时对存储过程进行修改,但对应用程序源代码毫无影响。因为应用程序源代 码只包含存 储过程的调用语句,从而极大地提高了程序的可移植性。 2.存储过程能够实现快速的执行速度 如果某一操作包含大量的Transaction-SQL 代码,,或分别被多次执行,那么存储过程要比批处理 的 执行速度快很多,因为存储过程是预编译的,在首次运行一个存储过程时,查询优化器对其进 行分析优 化,并给出最终被存在系统表中的执行计划,而批处理的Transaction-SQL 语句在每次运行时 都要进行 编译和优化,因此速度相对要慢一些。 3.存储过程能够减少网络流量 对于同一个针对数据数据库对象的操作,如查询修改,如果这一操作所涉及到的Transaction-SQL 语句被组织成一存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调 用语句,否 则将是多条SQL 语句从而大大增加了网络流量降低网络负载。 4.存储过程可被作为一种安全机制来充分利用 系统管理员通过,对执行某一存储过程的权限进行限制,从而能够实现对相应的数据访问权限的 限 制。 二、变量 @I 三、流程控制语句(if else | select case | while ) Select ... CASE 实例 DECLARE @iRet INT, @PKDisp VARCHAR(20) SET @iRet = ’1’ Select @iRet = CASE WHEN @PKDisp = ’一’ THEN 1 WHEN @PKDisp = ’二’ THEN 2 WHEN @PKDisp = ’三’ THEN 3 WHEN @PKDisp = ’四’ THEN 4 WHEN @PKDisp = ’五’ THEN 5 ELSE 100 END 四、存储过程格式 创建存储过程 Create Proc dbo.存储过程名 存储过程参数 AS 执行语句 RETURN 执行存储过程 GO *********************************************************/ -- 变量的声明,sql里面声明变量时必须在变量前加@符号 DECLARE @I INT -- 变量的赋值,变量赋值时变量前必须加set SET @I = 30 -- 声明多个变量 DECLARE @s varchar(10),@a INT -- Sql 里if语句 IF 条件 BEGIN 执行语句 END ELSE BEGIN ......》》 问题二:SQL存储过程如何调用存储过程? 在存储过程里用exec 执行另一存储过程名及它需要的参数就可以了 如 exec抚abc ’1’, ’2’(abc 是存储过程的名字, ’1’,’2’ 是它的参数 问题三:oracle中的存储过程,有什么作用,以及怎么在代码中使用? 楼上也不知道从哪扒下来的,一看LZ就是初学,举点例子不行吗? 比如建立个测试表 create table test(id int,name varchar2(10),counts int); insert into test values (1,’张三’,100);insert into test values (2,’李四’,200); mit; 现在给你出个题目是 查询所有人加在一起的counts是多少 创建存储过程 create or replace p_test --创建存储过程,asv_counts int;--定义变量begin --开始select sum(counts) into v_counts from test;--将得到的结果放到变量里DBMS_OUTPUT.PUT_LINE(v_counts);--将结果打印输出end;--结束 执行这种不带输入参数的 begin p_test;end; 然后你检查下结果 再给你创建一个带输入参数的 题目是,查询id为1的人名是什么 create or replace p_test1(v_id int)asv_name varchar2(10);beginselect name into v_name from test where id=v_id;DBMS_OUTPUT.PUT_LINE(v_name);end; 执行时这样 beginp_test1(1);end; 第2个我没给你写注释,你看你自己应该能理解吧 补充一下,存储过程不一定只是执行查询,也可以做删除或者修改等sql语句,总体来说就是几个或N个sql语句的 *** ,来完成系统内某些特定的需求,这些需求可以是一个sql搞定的,也可以是多个sql组合的 问题四:sql server怎么调用存储过程 在SQL Server数据库的维护或者Web开发中,有时需要在存储过程或者作业等其他数据库操作中调用其它的存储过程,下面介绍其调用的方法 在SQL Server数据库的维护或者Web开发中,有时需要在存储过程或者作业等其他数据库操作中调用其它的存储过程,下面介绍其调用的方法 一、SQL SERVER中调用不带输出参数的存储过程 SQL 代码 --存储过程的定义 create procedure ( @m_viewcount int = 0 ,@m_hotcount int = 0 ) as go --存储过程的调用 declare @m_viewcount int declare @m_hotcount int exec sp_add_product @m_viewcount,@m_hotcount 二、SQL SERVER中调用带输出参数的存储过程 SQL 代码 --定义存储过程 create procedure ( @m_viewcount int = 0 ,@m_hotcount int output ) --存储过程的调用 declare @m_viewcount int =0 declare @m_hotcount int exec dbo.sp_add_product @m_viewcount,@m_hotcount output 问题五:怎样调用存储过程里面的存储过程 这里一定要用Closed,因为其他非Closed状态再执行Open时会引发不能重复开启的异常 if (sqlConn.State != ConnectionState.Closed) sqlConn.Open(); Sqlmand sqlCmd = new Sqlmand(); sqlCmd.Connection = sqlConn; sqlCmd.mandText = proc_history; sqlCmd.mandType = mandType.StoredProcedure;sqlCmd.Parameters.Add(new SqlParameter(@like, NewTitle)); 如果要返回数据集,则不要调用sqlCmd.ExecuteNonQuery();,直接调用下面的方法 SqlDataAdapter sqlDA = new SqlDataAdapter(sqlCmd); DataSet ds = new DataSet(); sqlDA.Fill(ds); return ds; 如果是执行DML语句,就直接调用如下 sqlCmd.ExecuteNonQuery(); /* 以上两种情况不可同时存在 */ 问题六:怎么在PL/SQL Developer 中调用存储过程呢? 看你存储过程里是否有参数了 正常的话,在左边列表找到procedure里找到你写的那存储过程名,看上边有红叉没,没红叉就是编译成功,有红叉就是还有问题,需要改 然后右键点这个存储过程,(中文版选择测试按钮,英文版选择test按钮),然后下边有输入参数的地方,输入,点上边的齿轮即可 还有种方法,就是开一个sql窗口,写以下代码 begin 存储过程名; end; 然后点齿轮运行,注意两个分号不可少 问题七:数据库中的存储过程怎么用 啊!!求解..... 10分 关键字:procedure 例子: SQL》 create procedure procedure_name is begin --开始执行 insert into test(’10001’,’Visket’); end; / 以上操作就能为test表添加一条信息 执行存储过程procedure用的命令是exec 记住存储过程中,语句结尾一定要有分号 问题八:ORACLE存储过程怎么调用? PL/SQL SQL窗口 输入存储过程名,右键测试(英文版为test唬,出现测试界面,输入对应参数后F8,如果没有参数直接F8. 问题九:存储过程中怎么使用row 一般分为十种情况,每种语法各不相同: 1、 创建语法create proc | procedure pro_name as SQL_statements2、 创建不带参数存储过程--创建存储过程if (exists (select * from sys.objects where name = ’proc_get_student’)) drop proc proc_get_studentgocreate proc proc_get_studentas select * from student;--调用、执行存储过程exec proc_get_student;3、 修改存储过程--修改存储过程alter proc proc_get_studentasselect * from student;4、 带参存储过程--带参存储过程if (object_id(’proc_find_stu’, ’P’) is not null) drop proc proc_find_stugocreate proc proc_find_stu(@startId int, @endId int)as select * from student where id between @startId and @endIdgoexec proc_find_stu 2, 4;5、 带通配符参数存储过程--带通配符参数存储过程if (object_id(’proc_findStudentByName’, ’P’) is not null) drop proc proc_findStudentByNamegocreate proc proc_findStudentByName(@name varchar(20) = ’%j%’, @nextName varchar(20) = ’%’)as select * from student where name like @name and name like @nextName;goexec proc_findStudentByName;exec proc_findStudentByName ’%o%’, ’t%’;6、 带输出参数存储过程if (object_id(’proc_getStudentRecord’, ’P’) is not null) drop proc proc_getStudentRecordgocreate proc proc_getStudentRecord( @id int, --默认输入参数 @name varchar(20) out, --输出参数 @age varchar(20) output--输入输出参数)as select @name = name, @age = age from student where id = @id and sex = @age;go-- declare @id int, @name varchar(20), @temp varchar(20)......》》 问题十:如何使用sql语句查看存储过程 --下面这条语句可以查看存储过程具体代码exec sp_helptext 存储过程名--下面这条语句查看数据库中有哪些存储过程select * from sysobjects where type=’P’

Oracle如何创建存储过程和如何调用存储过程

【delphi+oracle报表解决方案(一)】delphi中调用oracle的存储过程(分带返回游标,不返回值两种) 关键字: delphi ,oracle存储过程,游标,返回数据集,报表注:delphi 6+ oracle 8.1.6一.创建包与包体1.附:建表aaclass为下面作测试用create table aaclass(CID VARCHAR2(50), CNAME VARCHAR2(50), pnumber NUMBER(10,0) );INSERT INTO aaclass values(’c1’, ’cn1’, 10 ) ;INSERT INTO aaclass values(’c2’, ’cn2’, 40 ) ;INSERT INTO aaclass values(’c1’, ’cn3’, 30 ) ;commit;2.建包:CREATE OR REPLACE PACKAGE PKG_JCCTEST1 AS type rc_class is ref cursor; --求p1,p2的和与差,返回的多个值通过游标返回 procedure GetSubAndSum2(p1 number,p2 number , ResultCursor out rc_class); --查询满足条件的数据集,返回数据集通过游标返回 procedure GetClass2(a in number,ResultCursor out rc_class ) ; --往表中插一条记录,不返回结果集时,本人用AdoQuery调用(adodataset好象要求必须返回结果集) procedure InsertClass( p_cid varchar2 ,p_cname varchar2 , p_pnumber number) ;end PKG_JCCTEST1; 3.建包体CREATE OR REPLACE PACKAGE BODY PKG_JCCTEST1 ASprocedure GetSubAndSum2(p1 number,p2 number , ResultCursor out rc_class)ISBEGIN open ResultCursor for select p1-p2 as "sum", p1+p2 as "sub" from dual;END ;procedure GetClass2(a in number,ResultCursor out rc_class )isbegin open ResultCursor for select aaclass.* from aaclass where pnumber 》a;end ;procedure InsertClass( p_cid varchar2 ,p_cname varchar2 , p_pnumber number) isbegin insert into aaclass values(p_cid,p_cname,p_pnumber) ;-- commit;end ; 二.在delphi中利用AdoDataSet调用上述第一个存储过程1.利用AdoConnection1连接数据库(驱动为 oracle Provider for OLE DB), **并在连接字符串中加入这一节: PLSQLRSet=1; 如下所示:Provider=OraOLEDB.Oracle.1;Password=KXD;Persist Security Info=True;User ID=KXD;Data Source=TEST3;PLSQLRSet=12.在窗体上加AdoDataSet1 指明连接为上述AdoConnection1,下面可以放一个按钮,单击按钮就能调用第一步中创建的包过程,并返回数据集。代码如下所示:procedure TForm1.Button1Click(Sender: TObject);var AResult , BResult : integer;begin ADODataSet1.Close ; ADODataSet1.CommandType := cmdText ; ADODataSet1.Parameters.Clear ; //***利用call方法调用oracle过程时,参数必须由?来传, 即使你要传的参数为常理 //输出游标的参数不需要指定!!!!!!,本来此函数带三个参数,我们这里只需要传两个参数. ADODataSet1.CommandText := ’{call PKG_JCCTEST1.GetSubAndSum2(?,?)}’ ; //***C 顺序有关,createparam必须放在commandtext赋值语句之后. // 创建第一个参数,对应call中的第一个?,ftinteger为类型,10为长度,45为传入的实参值 ADODataSet1.Parameters.CreateParameter(’p1’,ftinteger,pdinput,10,45); //创建第二个参数,根据createparameter的顺序 自动与call中的第二个参数对应 ADODataSet1.Parameters.CreateParameter(’p2’,ftinteger,pdinput,10,4); //下面调用ADODataSet1 的open方法,返回数据集(对应包过程的游标) ADODataSet1.Open ; //根据存储过程,数据集只有一条记录,所以不需要用while do 来遍历数据集,直接取数据了 //此处的字段名根据包过程中的返回游标 对应的字段名来取 //定义的存储过程返回游标如: open ResultCursor for // select p1-p2 as "sum", p1+p2 as "sub" from dual; //把对应的字段值取出来即可 AResult := ADODataSet1.Fields.FieldByName(’sub’).Value ; BResult := ADODataSet1.Fields.FieldByName(’sum’).Value ; //显示结果 showmessage(inttostr(AResult)) ; showmessage(inttostr(BResult)) ;end; 三.在delphi中利用AdoDataSet调用上述第二个存储过程 还是利用上述的AdoDataSet1来调用第二个存储过程,无需任何改动,加第二个按钮,单击时代码如下:procedure TForm1.Button2Click(Sender: TObject);begin ADODataSet1.Close ; ADODataSet1.CommandType := cmdText ; ADODataSet1.Parameters.Clear ; //***利用call方法调用oracle过程时,参数必须由?来传, 即使你要传的参数为常理 //输出游标的参数不需要指定!!!!!!,本来此函数带两个参数,我们这里只需要传一个参数. ADODataSet1.CommandText := ’{call PKG_JCCTEST1.GetClass2(?)}’ ; //***C 顺序有关,createparam必须放在commandtext赋值语句之后. // 创建第一个参数,对应call中的第一个?,ftinteger为类型,10为长度,20为传入的实参值 ADODataSet1.Parameters.CreateParameter(’p1’,ftinteger,pdinput,10,20); //下面调用ADODataSet1 的open方法,返回数据集(对应包过程的游标) ADODataSet1.Open ; while not ADODataSet1.Eof do begin showmessage(’CID : ’+string(ADODataSet1.FieldByName(’CID’).Value) + ’--CNAME :’ + string(ADODataSet1.FieldByName(’CNAME’).Value) + ’--PNUMBER :’ + string(ADODataSet1.FieldByName(’PNUMBER’).Value) ) ; ADODataSet1.Next ; end ;end; 四 利用adoquery调用第三个过程,不返回数据集的procedure TForm1.Button3Click(Sender: TObject);begin AdoQuery1.Close ; AdoQuery1.Parameters.Clear ; AdoQuery1.SQL.Clear ; AdoQuery1.SQL.Add(’{call PKG_JCCTEST1.GetSubAndSum2(?,?)}’) ; AdoQuery1.Parameters.CreateParameter(’P1’,ftstring,pdinput, 50,’c11’) ; AdoQuery1.Parameters.CreateParameter(’P2’,ftstring,pdinput, 50,’cn11’) ; AdoQuery1.Parameters.CreateParameter(’P3’,ftinteger,pdinput, 50,25) ; AdoQuery1.ExecSQL ;end;五 利用adoquery调用第一个过程,返回数据集的.procedure TForm1.Button4Click(Sender: TObject);begin AdoQuery1.Close ; AdoQuery1.Parameters.Clear ; AdoQuery1.SQL.Clear ; AdoQuery1.SQL.Add(’{call PKG_JCCTEST1.GetSubAndSum2(?,?)}’) ; AdoQuery1.Parameters.CreateParameter(’P1’,ftinteger,pdinput, 50,25) ; AdoQuery1.Parameters.CreateParameter(’P2’,ftinteger,pdinput, 50,22) ; AdoQuery1.Open ; Showmessage(string( AdoQuery1.FieldByName(’sub’).Value)+’-’+ string( AdoQuery1.FieldByName(’sum’).Value));end;六.关于三层体系的此类问题两层的解决了,三层类似.中间层用tadodataset 或tadoquery (+tdatasetprovider),中间层的adoconnection的连接字符串加上plsqlRset=1;客户端用clientdataset ,大同小异,举例如下: begin //调用相应的过程 ClientDataSet1.Close ; ClientDataSet1.Params.Clear ; ClientDataSet1.CommandText := ’{call PackageName.ProcedureName(?,?)}’ ; ClientDataSet1.Params.CreateParam(ftInteger , ’ParamName1’, ptInput) ; ClientDataSet1.Open ; end ;***隐藏网址***

oracle创建一个存储过程并调用它,问题如下:

先要创建一个表,表名自己定义,这里比如叫emp_tmp

create table emp_tmp(dname varchar2(50),sal number(10,2));

创建存储过程

create procedure p_salasbegininsert into emp_tmp select a.dname,sum(b.sal) from dept a,emp b where a.deptno=b.deptno and b.job=’MGR’;commit;end;

这还用注释么?就是一句sql语句其实

oracle存储过程基本语法

一:存储过程 创建存储过程,需要有CREATE PROCEDURE或CREATE ANY PROCEDURE的系统权限    删除存储过程,是过程的创建者或者拥有DROP ANY PROCEDURE系统权限  修改存储过程,则只能是过程的创建者或者拥有ALTER ANY PROCEDURE系统权限的人 执行(或调用)存储过程,是过程的创建者或是拥有EXECUTE ANY PROCEDURE系统权限的人或是被拥有者授予EXECUTE权限的人1:语法  1)创建 CREATE {AS|IS} BEGIN 可执行部分 END;  说明:      参数是可选的,但只能是IN类型(IN关键字可以省略)。      在定义部分的RETURN 数据类型,用来表示函数的数据类型,也就是返回值的类型,不可省略。      在可执行部分的RETURN(表达式),用来生成函数的返回值,其表达式的类型应该和定义部分说明的函数返回值的数据类型一致。在函数的执行部分可以有多个RETURN语句,但只有一个RETURN语句会被执行,一旦执行了RETURN语句,则函数结束并返回调用环境。  2)删除       DROP FUNCTION 函数名; 3)修改       ALTER PROCEDURE 函数名 COMPILE; 4)执行       变量名:=函数名(...)  三:对存储过程 和 函数的查看(可以通过对数据字典【USER_SOURCE】的访问来查询存储过程或函数的有关信息)  1:查询某个存储过程序内容 select TEXT from user_source WHERE NAME=’存储过程名’;  2:查看数据字殿 DESCRIBE USER_SOURCE ; //命令行中  3:查看存储过程的参数 DESCRIBE say_hello; //后面是过程名  4:查看发生错误 SHOW ERRORS ;  5:查询一个存储过程或函数是否是有效状态(即编译成功) SELECT STATUS FROM USER_OBJECTS WHERE OBJECT_NAME=’过程名’;//注意大小写 VALID表示该存储过程有效(即通过编译),INVALID表示存储过程无效或需要重新编译。它的状态会改变,这与它依赖外部表(表删除修改等操作)有关系 6:查看存储过程与表的依赖关系 SELECT REFERENCED_NAME,REFERENCED_TYPE FROM USER_DEPENDENCIES WHERE NAME=’SAY_HELLO’;  说明 NAME为实体名,TYPE为实体类型,REFERENCED_OWNER为涉及到的实体拥有者账户,REFERENCED_NAME为涉及到的实体名,REFERENCED_TYPE 为涉及到的实体类型。 问题: 如果一个用户A被授予执行属于用户B的一个存储过程的权限,在用户B的存储过程中,访问到用户C的表,用户B被授予访问用户C的表的权限,但用户A没有被授予访问用户C表的权限,那么用户A调用用户B的存储过程是失败的还是成功的呢?答案是成功的。

关于本次oracle存储过程的创建和使用和oracle 创建存储过程 急啊的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。

oracle存储过程的创建和使用(oracle 创建存储过程 急啊)

本文编辑:admin

更多文章:


autocad新手教程(autocad2010激活教程)

autocad新手教程(autocad2010激活教程)

本文目录autocad2010激活教程《AutoCAD2020中文版基础教程》,《Photoshop入门与精通》,《Excel实战技巧精CAD初学入门该从哪下手autocad2010激活教程Autocad2010简体中文版安装过程中注意的地

2024年7月10日 20:12

字体样式变化多端还是变幻莫测(形容变化多端的四字词语及解释)

字体样式变化多端还是变幻莫测(形容变化多端的四字词语及解释)

本文目录形容变化多端的四字词语及解释两个与瞬息万变相近的四字词语.变化莫测什么意思 变化莫测解释“变换莫测”和“变幻莫测”的意思有区别吗语文形容变化多端四字成语变幻莫测是什么意思形容变化多的四字词语 形容变化多的词语四字成语形容变化多的四字

2024年7月18日 02:27

在线客服系统 开源(有没有开源的Java在线客服系统)

在线客服系统 开源(有没有开源的Java在线客服系统)

本文目录有没有开源的Java在线客服系统开源的独立在线客服系统合从开源在线客服系统怎么样开源在线客服系统有哪些有没有什么好的开源的在线客服系统有没有开源的Java在线客服系统Open Web Messenger (现已经改名为 Mibew

2024年6月29日 13:57

程序员是什么行业(程序员是属于互联网行业吗)

程序员是什么行业(程序员是属于互联网行业吗)

本文目录程序员是属于互联网行业吗程序员属于哪一类职业程序员是属于互联网行业吗程序员通常被认为是互联网行业的从业人员之一,但并不一定是所有程序员都在互联网行业工作。程序员是指从事计算机程序开发、维护、测试等工作的专业人员,其工作范围不仅限于互

2024年6月25日 06:28

graphics 630显卡怎么样(超核心显卡uhd 630怎么样)

graphics 630显卡怎么样(超核心显卡uhd 630怎么样)

本文目录超核心显卡uhd 630怎么样graphics 630是个咋样的显卡,大体上能抵HDG 630显卡怎么样Intel HD Graphics630相当于什么请问intel hd630相当于什么显卡超核心显卡uhd 630怎么样还不错的

2024年7月8日 03:17

数据库replace函数怎么用(数据库函数怎么用)

数据库replace函数怎么用(数据库函数怎么用)

本文目录数据库函数怎么用sql server replace 函数使用方法c#数据库SQL语句—replace使用sql数据库中把字段数据中半角括号修改为全角括号要删除MySQL一列数据中的某个文字如何删除vb的查找并替换功能怎么用数据库函

2024年5月16日 21:37

qq机器人java脚本下载(QQ机器人)

qq机器人java脚本下载(QQ机器人)

大家好,qq机器人java脚本下载相信很多的网友都不是很明白,包括QQ机器人也是一样,不过没有关系,接下来就来为大家分享关于qq机器人java脚本下载和QQ机器人的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!本文目录Q

2024年8月25日 13:05

十六进制解码在线(想知道这串是什么编码以及它是如何编译的“%E7%BE%8E%E5%AE%B9%E9%A1%BE%E9%97%AE”)

十六进制解码在线(想知道这串是什么编码以及它是如何编译的“%E7%BE%8E%E5%AE%B9%E9%A1%BE%E9%97%AE”)

本文目录想知道这串是什么编码以及它是如何编译的“%E7%BE%8E%E5%AE%B9%E9%A1%BE%E9%97%AE”“哎“的区位码是1605,其国标码的十六进制编码为多少Java Mina通讯框架中,假如我的通讯协议里传的是:十六进制

2024年7月9日 18:09

align with用法(in align with是什么意思)

align with用法(in align with是什么意思)

大家好,关于align with用法很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于in align with是什么意思的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有

2024年7月9日 11:34

云手机制作教程(侠众道手游云手机多开需要怎么做能不能给点建议)

云手机制作教程(侠众道手游云手机多开需要怎么做能不能给点建议)

其实云手机制作教程的问题并不复杂,但是又很多的朋友都不太了解侠众道手游云手机多开需要怎么做能不能给点建议,因此呢,今天小编就来为大家分享云手机制作教程的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录侠众道手游云手

2024年10月12日 02:10

视频的所有格式(求视频所有格式缩写)

视频的所有格式(求视频所有格式缩写)

“视频的所有格式”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看视频的所有格式(求视频所有格式缩写)!本文目录求视频所有格式缩写常用的视频文件格式都有哪些视频格式有哪几种常用的视频格式有那些常用的视频格式有哪些求视频所有格式

2024年8月7日 09:27

exchange怎么读(exchange怎么读)

exchange怎么读(exchange怎么读)

本文目录exchange怎么读Exchange怎么读呀 谢谢exchange的意思exchange中文什么意思Exchange是什么意思Exchange是什么意思呢Exchange怎么读exchange怎么读 这单词请帮我用中文写下exch

2024年7月12日 08:11

学java有没有半途而废的(大四快毕业了,现在学java来得及吗有什么好的学习方法或步骤)

学java有没有半途而废的(大四快毕业了,现在学java来得及吗有什么好的学习方法或步骤)

这篇文章给大家聊聊关于学java有没有半途而废的,以及大四快毕业了,现在学java来得及吗有什么好的学习方法或步骤对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录大四快毕业了,现在学java来得及吗有什么好的学习方法或步骤学生

2024年7月20日 08:45

apple tree(apple tree里的apple到底是苹果 还是苹果树的意思 为何字典上还有apple指苹果树)

apple tree(apple tree里的apple到底是苹果 还是苹果树的意思 为何字典上还有apple指苹果树)

各位老铁们好,相信很多人对apple tree都不是特别的了解,因此呢,今天就来为大家分享下关于apple tree以及apple tree里的apple到底是苹果 还是苹果树的意思 为何字典上还有apple指苹果树的问题知识,还望可以帮助

2024年8月6日 12:45

web前端开发工程师网页设计(web前端工程师和网页设计师的区别)

web前端开发工程师网页设计(web前端工程师和网页设计师的区别)

本文目录web前端工程师和网页设计师的区别web前端设计工程师与网页设计师有什么区别web前端设计工程师与网页设计有什么区别web前端工程师和网页设计有什么区别网页设计师和web前端开发工程师一样吗web前端工程师和网页设计师的区别前端开发

2024年7月10日 18:24

pull是什么意思中文翻译(PULL的中文翻意是什么)

pull是什么意思中文翻译(PULL的中文翻意是什么)

本文目录PULL的中文翻意是什么英文PuLL什么意思PULL的中文翻意是什么pull 英 vt.& vi.拉; 扯; 拉过来; 划(船);vt.赢得; 吸引异性; 取消; (耍手腕)得逞;n.拖; 爬; 影响力;英文PuLL什么意思pu

2024年7月3日 06:35

fontcreator调整字体间距(high-logic fontcreator如何修改字体大小)

fontcreator调整字体间距(high-logic fontcreator如何修改字体大小)

大家好,关于fontcreator调整字体间距很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于high-logic fontcreator如何修改字体大小的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问

2024年8月10日 17:35

myeclipse快捷键大全(求MyEclipse 7.0所有快捷键)

myeclipse快捷键大全(求MyEclipse 7.0所有快捷键)

本文目录求MyEclipse 7.0所有快捷键在myeclipse中快速文件的快捷键是什么 像这样的界面求myEclipse 常用快捷键用MyEclipse 里面哪些快捷键MyEclipse的快捷键多都有什么求MyEclipse 7.0所有

2024年6月24日 16:46

onsubmit是网页中的事件吗(JavaScript中,当用户表单填写不正确,如果通过JavaScript阻止用户提交表单)

onsubmit是网页中的事件吗(JavaScript中,当用户表单填写不正确,如果通过JavaScript阻止用户提交表单)

本文目录JavaScript中,当用户表单填写不正确,如果通过JavaScript阻止用户提交表单javascript 触发事件ASP问题 onclick和onsubmit的区别js中click事件与submit事件的区别jsp中form表

2024年7月16日 06:18

浏览器隐藏了菜单栏怎么恢复(网页上面隐藏了怎么办)

浏览器隐藏了菜单栏怎么恢复(网页上面隐藏了怎么办)

大家好,今天小编来为大家解答以下的问题,关于浏览器隐藏了菜单栏怎么恢复,网页上面隐藏了怎么办这个很多人还不知道,现在让我们一起来看看吧!本文目录网页上面隐藏了怎么办2345王牌浏览器如何找回隐藏的菜单栏网页上面隐藏了怎么办问题一:网页上面的

2024年9月29日 21:55

近期文章

本站热文

iphone vpn设置(ios设置vpn快捷开关)
2024-07-22 15:01:12 浏览:2342
windows12正式版下载(操作系统Windows Server 2012 R2,在哪能下载到,公司用的)
2024-07-20 17:26:53 浏览:1736
client mfc application未响应(每次进cf就提示client MFC Application未响应该怎么办啊!急急急)
2024-07-20 11:15:58 浏览:1168
java安装教程(win10如何安装JAVA)
2024-07-19 19:55:49 浏览:1164
标签列表

热门搜索