精华内容
下载资源
问答
  • --部分参考有错误 ...create procedure DisStudent as select * from student --②利用存储过程查找Student表中某学号的记录(学号作为输入参数) create proc FindSno @sno varchar(10) as select * from...

    --部分参考有错误
    --创建并调用以下存储过程
    --①利用存储过程查找Student表中所有人的记录(无参)
    create procedure DisStudent
    as 
    select * from student
    --②利用存储过程查找Student表中某学号的记录(学号作为输入参数)
    create proc FindSno
    @sno varchar(10)
    as
    select * from student where sno=@sno
    --③利用存储过程查找SC表中某学号、某门课程的记录(学号,课程号作为输入参数)
    create procedure FindSC
    @sno varchar(10),
    @cno varchar(5)
    as
    select * from sc where sno=@sno and cno=@cno
    --④计算出某学生的平均分(学号作为输入参数)
    create procedure SnoAvg
    @sno varchar(10)
    as
    select avg(grade) from sc where sno=@sno
    --⑤创建一个的存储过程,将某人的平均成绩用输出参数返回
    --(学号作为输入参数,平均成绩作为输出参数)
    create procedure SnoAvgRet
    @sno varchar(10),
    @avgGra decimal(5,2) output
    as
    select @avgGra=avg(grade*1.0) from sc where sno=@sno
    --(选做)⑥创建一个存储过程,将课程中某门课程的学分修改为指定的值,
    --其中某门课程的课程号、指定的值通过参数传递。
    --并多次调用执行该存储过程来修改不同的课程的学分值。
    --(课程号、学分作为输入参数,返回修改状态)
    create procedure MdfCouCrdt
    @cno varchar(5),
    @credit smallint
    as
    begin
    	declare @ret int
    	set @ret=0
    	if exists
    	(
    		select * 
    		from course 
    		where @cno=cno
    	)	
    	begin
    		set @ret=1
    		update course 
    		set ccredit=@credit 
    		where cno=@cno
    	end
    return @ret
    end
    --(二)用户自定义函数 
    --创建并调以下自定义函数:
    --①创建一个函数,输入学生学号,要求出此学生所选课程的门数
    --此函数是错误的
    --create function SnoCoure (@sno varchar(10))
    --returns int
    --as
    --begin
    --	declare @sumc int
    --	select @sumc=count(*)
    --	from sc
    --	where sno=@sno
    --	return @sumc
    --end
    --select SnoCoure('200215121') 
    --②创建一个函数,输入学生姓名,要求输出此学生所选课程情况(课程名、成绩)
    create function PrintSnoCourse(@sname varchar(10))
    returns table
    as 
    return (
    	select course.cname,sc.grade 
    	from course,sc,student
    	where	course.cno=sc.cno 
    			and student.sno=sc.sno
    			and student.sname=@sname
    		)
    --select * from PrintSnoCourse('刘晨')
    
    展开全文
  • Oracle基础学习三:过程PROCEDURE函数FUNCTION 的创建及调用
  • Oracle 存储过程函数 区别
    定义:
    

    存储过程(Stored Procedure )是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程

    带有参数)来执行它。

    存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。

    存储过程是由流控制和SQL 语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即可。

    Oracle 中,若干个有联系的过程可以组合在一起构成程序包。


    优 点:

    1. 存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。

    2.当对数据库进行复杂操作时(如对多个表进行Update、Insert、Query、Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。

    3.存储过程可以重复使用,可减少数据库开发人员的工作量。

    4.安全性高,可设定只有某用户才具有对指定存储过程的使用权。


    存储过程与函数的对比


    存储过程的优缺点

    优点:减少网络交互的成本。
    缺点:
    a、不可移植性,每种数据库的内部编程语法都不太相同,当你的系统需要兼容多种数据库时,最好不要用存储过程。
    b、学习成本高,DBA一般都擅长写存储过程,但并不是每个程序员都能写好存储过程,除非你的团队有较多的开发人员熟悉写存储过程,否则后期系统维护会产生问题。
    c、业务逻辑多处存在,采用存储过程后也就意味着你的系统有一些业务逻辑不是在应用程序里处理,这种架构会增加一些系统维护和调试成本。
    d、存储过程和常用应用程序语言不一样,它支持的函数及语法有可能不能满足需求,有些逻辑就只能通过应用程序处理。
    e、如果存储过程中有复杂运算的话,会增加一些数据库服务端的处理成本,对于集中式数据库可能会导致系统可扩展性问题。
    f、为了提高性能,数据库会把存储过程代码编译成中间运行代码(类似于Java的class文件),所以更像静态语言。当存储过程引用的对像(表、视图等等)结构改变后,
    存储过程需要重新编译才能生效,在24*7高并发应用场景,一般都是在线变更结构的,所以在变更的瞬间要同时编译存储过程,这可能会导致数据库瞬间压力上升引起故障(oracle数据库就存在这样的问题)。

    展开全文
  • 一、java调用PROCEDURE1.1 新建存储过程如下代码中,关键字说明:IN :表示入参OUT:表示出参RETURNING :表示语句执行完后的返回值。这里返回的是刚插入的数据的idSEQ_WORK_REPORT_ID.nextval:表示的是序列,读者...

    由于网络上这种方面的文章相对较少较乱,所以特别来写一篇。

    一、java调用PROCEDURE

    1.1 新建存储过程

    如下代码中,关键字说明:

    IN :表示入参

    OUT:表示出参

    RETURNING :表示语句执行完后的返回值。这里返回的是刚插入的数据的id

    SEQ_WORK_REPORT_ID.nextval:表示的是序列,读者自行新建序列。有关序列的创建,请自行搜索。

    CREATE OR REPLACE PROCEDURE p_save_note_details(i_login_user_id IN NUMBER, i_receive_user_id IN VARCHAR2,

    i_work_content IN VARCHAR2, i_next_content IN VARCHAR2,

    i_work_help IN VARCHAR2, i_remark IN VARCHAR2,

    i_start_date IN VARCHAR2, i_end_date IN VARCHAR2,

    i_id_for_save IN VARCHAR2,

    r_note_id OUT NUMBER, r_send_id OUT NUMBER) IS

    v_seq_id NUMBER; --定义变量

    BEGIN

    -- 拿出序列id

    SELECT SEQ_WORK_REPORT_ID.nextval

    INTO v_seq_id

    FROM dual;

    -- 插入主表

    INSERT INTO T_WEEK_NOTE_DETAIL (ID, LOGIN_USER_ID, RECEIVE_USER_ID, WORK_CONTENT, NEXT_CONTENT, WORK_HELP, REMARK,

    START_DATE, END_DATE)

    VALUES (v_seq_id, i_login_user_id, i_receive_user_id, i_work_content, i_next_content, i_work_help, i_remark,

    to_date(i_start_date, 'yyyy-mm-dd hh24:mi:ss'), to_date(i_end_date, 'yyyy-mm-dd hh24:mi:ss'))

    RETURNING ID INTO r_note_id;

    -- 插入关联表

    INSERT INTO T_WEEK_REPORT_SEND (ID, LOGIN_USER_ID, OPTION_TYPE, SEND_TYPE)

    SELECT

    v_seq_id AS ID,

    to_number(tmp.column_value) AS LOGIN_USER_ID,

    1 AS OPTION_TYPE,

    decode(to_number(tmp.column_value), i_login_user_id, 1, 2) AS SEND_TYPE

    FROM

    (SELECT column_value

    FROM TABLE (fn_split(i_id_for_save, ','))) tmp;

    -- 返回序列id给出参,用来校验的。防止上一步的insert报错退出而不知道。

    SELECT v_seq_id

    INTO r_send_id

    FROM dual;

    -- 提交修改

    COMMIT;

    END;

    1.2 java调用

    核心代码如下。

    先获取 java.sql.Connection

    调用conn.prepareCall 得到CallableStatement

    设置CallableStatement入参以及设置出参类型

    获取出参,校验完成。

    java.sql.Connection conn = context.getDBService().getDBConnection(dbName);//获取对应数据库连接池

    //设置入参

    CallableStatement statmentCall = conn.prepareCall("{call p_save_note_details(?,?,?,?,?,?,?,?,?,?,?)}");

    statmentCall.setInt(1, Integer.valueOf(login_user_id));

    statmentCall.setString(2, receive_user_id);

    statmentCall.setString(3, work_content);

    statmentCall.setString(4, next_content);

    statmentCall.setString(5, work_help);

    statmentCall.setString(6, remark);

    statmentCall.setString(7, start_date);

    statmentCall.setString(8, end_date);

    if (receive_user_id.contains(login_user_id)) {//剔除接收人是自己的记录

    statmentCall.setString(9, receive_user_id);

    } else {

    statmentCall.setString(9, login_user_id + "," + receive_user_id);

    }

    //设置出参类型

    statmentCall.registerOutParameter(10, OracleTypes.NUMBER);

    statmentCall.registerOutParameter(11, OracleTypes.NUMBER);

    statmentCall.execute();

    //获取出参

    Integer note_id = statmentCall.getInt(10);

    Integer send_id = statmentCall.getInt(11);

    if (note_id != null && send_id != null && note_id.intValue() > 0 && note_id.intValue() == send_id.intValue()) {

    response.setErrorNo(0);

    response.setErrorInfo("新增成功");

    return;

    } else {

    response.setErrorNo(-1);

    response.setErrorInfo("新增失败");

    log.warn("491722 rollback 新增失败");

    return;

    }

    二、java调用Funtion

    2.1 新建Funtion

    oracle 的function 语法格式和存储过程类似,如下:

    return number:表明函数返回值为整型。可以看出 ,该函数正常结束时返回值为0,异常退出时返回-1。

    r_cur:游标类型出参。返回的具体结果可以放在这里面。通过OPEN FOR关键字来赋值。

    create or replace function fun_user_visit_add(i_login_user_id IN NUMBER, -- 登录id | 发送人id

    i_receive_user_id IN VARCHAR2, -- 接收人id,多个id之间用英文逗号隔开

    i_work_content IN VARCHAR2, -- 主要事宜

    i_respondent IN VARCHAR2, -- 拜访对象

    i_visit_type IN VARCHAR2, -- 拜访方式:0其他,1当面,2电话,3聊天软件

    i_work_result IN VARCHAR2, -- 拜访结果

    i_remark IN VARCHAR2, -- 备注

    i_id_for_save IN VARCHAR2, -- 剔除重复的发送人id后的值,用来存储到send表中

    r_cur OUT cjtype.t_cursor) -- 出參

    return number

    is

    v_seq_id NUMBER;

    midstr varchar2(400);

    midint number;

    log_func_no number; --功能号

    log_sp_name varchar2(4000); --sp名称

    log_table_name varchar2(4000); --操作的表

    begin

    --日志记录相关变量

    log_func_no := 'xxxxxx';

    log_sp_name := '';

    log_table_name := 'T_WEEK_VISIT_DETAIL,T_WEEK_REPORT_SEND';

    ----业务操作区域------------------------------------------------------------

    -- 拿出序列id

    SELECT SEQ_WORK_REPORT_ID.nextval INTO v_seq_id FROM dual;

    -- 插入主表

    INSERT INTO T_WEEK_VISIT_DETAIL

    (ID,

    LOGIN_USER_ID,

    RECEIVE_USER_ID,

    WORK_CONTENT,

    RESPONDENT,

    VISIT_TYPE,

    WORK_RESULT,

    REMARK)

    VALUES

    (v_seq_id,

    i_login_user_id,

    i_receive_user_id,

    i_work_content,

    i_respondent,

    i_visit_type,

    i_work_result,

    i_remark);

    -- 插入关联表

    INSERT INTO T_WEEK_REPORT_SEND

    (ID, LOGIN_USER_ID, OPTION_TYPE, SEND_TYPE)

    SELECT v_seq_id AS ID,

    to_number(tmp.column_value) AS LOGIN_USER_ID,

    3 AS OPTION_TYPE,

    decode(to_number(tmp.column_value), i_login_user_id, 1, 2) AS SEND_TYPE

    FROM (SELECT column_value FROM TABLE(fn_split(i_id_for_save, ','))) tmp;

    COMMIT;

    -- 返回结果

    open r_cur for

    select v_seq_id as seq_id from dual;

    return 0;

    exception

    when others then

    midstr := sqlerrm;

    midint := sqlcode;

    --必须回滚

    rollback;

    -------------------------------------------------------------------------------

    -------- 日志记录区 --------

    ------------------------------------------------------------------------------

    open r_cur for

    select -1 as error_no, log_func_no || ':' || midstr as error_info

    from dual;

    return - 1;

    end fun_user_visit_add;

    2.2 java调用Function

    java.sql.Connection conn = context.getDBService().getDBConnection(dbName);//获取对应数据库连接池

    //入参

    CallableStatement statmentCall = conn.prepareCall("{? = call fun_user_outside_add(?,?,?,?,?,?,?,?)}");

    statmentCall.registerOutParameter(1, OracleTypes.NUMBER);

    statmentCall.setInt(2, Integer.valueOf(login_user_id));

    statmentCall.setString(3, receive_user_id);

    statmentCall.setString(4, work_content);

    statmentCall.setString(5, start_date);

    statmentCall.setString(6, end_date);

    statmentCall.setString(7, remark);

    if (receive_user_id.contains(login_user_id)) {//剔除接收人是自己的记录

    statmentCall.setString(8, receive_user_id);

    } else {

    statmentCall.setString(8, login_user_id + "," + receive_user_id);

    }

    //出参

    statmentCall.registerOutParameter(9, OracleTypes.CURSOR);

    statmentCall.execute();

    //获取出参

    int ret = statmentCall.getInt(1);

    if (ret < 0) {

    response.setErrorNo(-1);

    response.setErrorInfo("新增失败");

    log.warn("491724 新增失败");

    return;

    } else {

    response.setErrorNo(0);

    response.setErrorInfo("新增成功");

    ResultSet resultSet = (ResultSet) statmentCall.getObject(9);

    if (resultSet.next()) {

    int r_seq_id = resultSet.getInt("seq_id");

    // 获取值后 do something...

    }

    return;

    }

    展开全文
  • 一、新建存储过程 如下代码中,关键字说明: IN :表示入参 OUT:表示出参 RETURNING :表示语句执行完后的返回值。这里返回的是刚插入的数据的id SEQ_WORK_REPORT_ID.nextval:表示的是序列,读者自行新建序列。...

    由于网络上这种方面的文章相对较少较乱,所以特别来写一篇。

    一、java调用PROCEDURE

    1.1 新建存储过程

    如下代码中,关键字说明:

    • IN :表示入参
    • OUT:表示出参
    • RETURNING :表示语句执行完后的返回值。这里返回的是刚插入的数据的id
    • SEQ_WORK_REPORT_ID.nextval:表示的是序列,读者自行新建序列。有关序列的创建,请自行搜索。
    
    CREATE OR REPLACE PROCEDURE p_save_note_details(i_login_user_id  IN  NUMBER, i_receive_user_id IN VARCHAR2,
                                                    i_work_content   IN  VARCHAR2, i_next_content IN VARCHAR2,
                                                    i_work_help      IN  VARCHAR2, i_remark IN VARCHAR2,
                                                    i_start_date     IN  VARCHAR2, i_end_date IN VARCHAR2,
                                                    i_id_for_save    IN  VARCHAR2,
                                                    r_note_id OUT NUMBER, r_send_id OUT NUMBER) IS
      v_seq_id NUMBER;   --定义变量
      BEGIN
        -- 拿出序列id
        SELECT SEQ_WORK_REPORT_ID.nextval
        INTO v_seq_id
        FROM dual;
    
        --  插入主表
        INSERT INTO T_WEEK_NOTE_DETAIL (ID, LOGIN_USER_ID, RECEIVE_USER_ID, WORK_CONTENT, NEXT_CONTENT, WORK_HELP, REMARK,
                                                 START_DATE, END_DATE)
        VALUES (v_seq_id, i_login_user_id, i_receive_user_id, i_work_content, i_next_content, i_work_help, i_remark,
                to_date(i_start_date, 'yyyy-mm-dd hh24:mi:ss'), to_date(i_end_date, 'yyyy-mm-dd hh24:mi:ss'))
        RETURNING ID INTO r_note_id;
    
        -- 插入关联表
        INSERT INTO T_WEEK_REPORT_SEND (ID, LOGIN_USER_ID, OPTION_TYPE, SEND_TYPE)
          SELECT
            v_seq_id                                                   AS ID,
            to_number(tmp.column_value)                                AS LOGIN_USER_ID,
            1                                                          AS OPTION_TYPE,
            decode(to_number(tmp.column_value), i_login_user_id, 1, 2) AS SEND_TYPE
          FROM
            (SELECT column_value
             FROM TABLE (fn_split(i_id_for_save, ','))) tmp;
    
    	--  返回序列id给出参,用来校验的。防止上一步的insert报错退出而不知道。
    	SELECT v_seq_id
        INTO r_send_id
        FROM dual;
    
    	-- 提交修改
        COMMIT;
      END;
    

    1.2 java调用

    核心代码如下。

    • 先获取 java.sql.Connection
    • 调用conn.prepareCall 得到CallableStatement
    • 设置CallableStatement入参以及设置出参类型
    • 获取出参,校验完成。
    
     			java.sql.Connection conn = context.getDBService().getDBConnection(dbName);//获取对应数据库连接池
    
                   //设置入参
                CallableStatement statmentCall = conn.prepareCall("{call p_save_note_details(?,?,?,?,?,?,?,?,?,?,?)}");
                statmentCall.setInt(1, Integer.valueOf(login_user_id));
                statmentCall.setString(2, receive_user_id);
                statmentCall.setString(3, work_content);
                statmentCall.setString(4, next_content);
                statmentCall.setString(5, work_help);
                statmentCall.setString(6, remark);
                statmentCall.setString(7, start_date);
                statmentCall.setString(8, end_date);
                if (receive_user_id.contains(login_user_id)) {//剔除接收人是自己的记录
                    statmentCall.setString(9, receive_user_id);
                } else {
                    statmentCall.setString(9, login_user_id + "," + receive_user_id);
                }
                //设置出参类型
                statmentCall.registerOutParameter(10, OracleTypes.NUMBER);
                statmentCall.registerOutParameter(11, OracleTypes.NUMBER);
    
                statmentCall.execute();
    
                //获取出参
                Integer note_id = statmentCall.getInt(10);
                Integer send_id = statmentCall.getInt(11);
    
                if (note_id != null && send_id != null && note_id.intValue() > 0 && note_id.intValue() == send_id.intValue()) {
                    response.setErrorNo(0);
                    response.setErrorInfo("新增成功");
                    return;
                } else {
                    response.setErrorNo(-1);
                    response.setErrorInfo("新增失败");
                    log.warn("491722 rollback 新增失败");
                    return;
                }
    

    二、java调用Funtion

    2.1 新建Funtion

    oracle 的function 语法格式和存储过程类似,如下:

    • return number:表明函数返回值为整型。可以看出 ,该函数正常结束时返回值为0,异常退出时返回-1。
    • r_cur:游标类型出参。返回的具体结果可以放在这里面。通过OPEN FOR关键字来赋值。
    create or replace function fun_user_visit_add(i_login_user_id   IN NUMBER, -- 登录id | 发送人id
                                                  i_receive_user_id IN VARCHAR2, -- 接收人id,多个id之间用英文逗号隔开
                                                  i_work_content    IN VARCHAR2, -- 主要事宜
                                                  i_respondent      IN VARCHAR2, -- 拜访对象
                                                  i_visit_type      IN VARCHAR2, -- 拜访方式:0其他,1当面,2电话,3聊天软件
                                                  i_work_result     IN VARCHAR2, -- 拜访结果
                                                  i_remark          IN VARCHAR2, -- 备注
                                                  i_id_for_save     IN VARCHAR2, -- 剔除重复的发送人id后的值,用来存储到send表中
                                                  r_cur             OUT cjtype.t_cursor) -- 出參
     return number
    
     is
      v_seq_id NUMBER;
    
      midstr          varchar2(400);
      midint          number;
      log_func_no     number; --功能号
      log_sp_name     varchar2(4000); --sp名称
      log_table_name  varchar2(4000); --操作的表
    begin
    
      --日志记录相关变量
      log_func_no     := 'xxxxxx';
      log_sp_name     := '';
      log_table_name  := 'T_WEEK_VISIT_DETAIL,T_WEEK_REPORT_SEND';
    
      ----业务操作区域------------------------------------------------------------
    
      -- 拿出序列id
      SELECT SEQ_WORK_REPORT_ID.nextval INTO v_seq_id FROM dual;
    
      -- 插入主表
      INSERT INTO T_WEEK_VISIT_DETAIL
        (ID,
         LOGIN_USER_ID,
         RECEIVE_USER_ID,
         WORK_CONTENT,
         RESPONDENT,
         VISIT_TYPE,
         WORK_RESULT,
         REMARK)
      VALUES
        (v_seq_id,
         i_login_user_id,
         i_receive_user_id,
         i_work_content,
         i_respondent,
         i_visit_type,
         i_work_result,
         i_remark);
      
      -- 插入关联表
      INSERT INTO T_WEEK_REPORT_SEND
        (ID, LOGIN_USER_ID, OPTION_TYPE, SEND_TYPE)
        SELECT v_seq_id AS ID,
               to_number(tmp.column_value) AS LOGIN_USER_ID,
               3 AS OPTION_TYPE,
               decode(to_number(tmp.column_value), i_login_user_id, 1, 2) AS SEND_TYPE
          FROM (SELECT column_value FROM TABLE(fn_split(i_id_for_save, ','))) tmp;
    
      COMMIT;
    
      -- 返回结果
      open r_cur for
        select v_seq_id as seq_id from dual;
      return 0;
    
    exception
      when others then
        midstr := sqlerrm;
        midint := sqlcode;
        --必须回滚
        rollback;
      
        -------------------------------------------------------------------------------
        --------          日志记录区                                          --------
        ------------------------------------------------------------------------------
      
        open r_cur for
          select -1 as error_no, log_func_no || ':' || midstr as error_info
            from dual;
      
        return - 1;
      
    end fun_user_visit_add;
    

    2.2 java调用Function

    	  java.sql.Connection conn = context.getDBService().getDBConnection(dbName);//获取对应数据库连接池
    
    	 	//入参
    	  CallableStatement statmentCall = conn.prepareCall("{? = call fun_user_outside_add(?,?,?,?,?,?,?,?)}");
          statmentCall.registerOutParameter(1, OracleTypes.NUMBER);
          statmentCall.setInt(2, Integer.valueOf(login_user_id));
          statmentCall.setString(3, receive_user_id);
          statmentCall.setString(4, work_content);
          statmentCall.setString(5, start_date);
          statmentCall.setString(6, end_date);
          statmentCall.setString(7, remark);
          if (receive_user_id.contains(login_user_id)) {//剔除接收人是自己的记录
              statmentCall.setString(8, receive_user_id);
          } else {
              statmentCall.setString(8, login_user_id + "," + receive_user_id);
          }
          //出参
          statmentCall.registerOutParameter(9, OracleTypes.CURSOR);
    
          statmentCall.execute();
    
          //获取出参
          int ret = statmentCall.getInt(1);
    
          if (ret < 0) {
              response.setErrorNo(-1);
              response.setErrorInfo("新增失败");
              log.warn("491724  新增失败");
              return;
          } else {
              response.setErrorNo(0);
              response.setErrorInfo("新增成功");
              ResultSet resultSet = (ResultSet) statmentCall.getObject(9);
              if (resultSet.next()) {
                  int r_seq_id = resultSet.getInt("seq_id");
                 // 获取值后 do something...
              }
              return;
          }
    
    展开全文
  • 存储过程函数的区别 本质上没区别,执行的本质都一样。 只是函数有只能返回一个变量的限制。而存储过程可以返回多个。 函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程要让sql的query 可以执行...
  • 问题:PKG_END_TO_END_EDW这个函数下的存储过程pro_end_to_end_edw_open执行很慢,但是在数据库里找不到这个function.procedure对应的sql 思路: function....
  • Oracle 存储过程procedure)和函数Function)小结1、Oracle 存储过程procedure)和函数Function)的区别2、在Oracle的函数中,返回表对象2.1、创建表对象类型2.2、创建演示函数2.2.1、管道化表函数方式2.2.2...
  • 存储过程(procedure)和函数(function)

    千次阅读 2019-09-11 16:00:17
    存储过程 定义 存储过程时一组为了完成特定功能的sql语句,编译后存储在数据库中 案例 打印 hello world create or replace procedure test_procedure1 as begin ...-- 存储过程函数中 as和is效...
  • 程序结构 ============================================================= 例题1: 取出s_emp表(参见oracle默认数据库test中的相关表)中的记录用变量接收并输出 s_emp //变量要和s_emp表中的数据类型相匹配 ...
  • --函数的创建 create function func1(dno number) return NUMBER--必须带有返回值 is v_max number;--定义返回值 begin select max(sal) into v_max--赋值 from emp where deptno= dno; RETURN v_max;...
  • 大致三类:while、loop、repeat 循环控制关键字:iterate(类似 continue ),leave(类似 break ) while 语法: while 循环条件 do ...loop,可以作为永真循环,除非循环体存在 leave 的可能性。...
  • Oracle基础学习三:过程PROCEDURE函数FUNCTION 的创建及调用1.创建过程SP_STUDENT2.在SQL Plus中调用过程SP_STUDENT3.在VS程序中调用过程SP_STUDENT4.创建函数FN_ADDONE5.调用函数FN_ADDONE6.删除函数FN_ADDONE====...
  • 存储过程类型分为存储过程(PROCEDURE)和存储函数(FUNCTION)。Ø存储过程:通过CALL语句调用过程。这些过程可以使用输出变量或结果集传回值。Ø存储函数:在语句中调用函数。这些函数可返回标量值。l使用存储过程的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,422
精华内容 568
关键字:

procedure函数过程function