oracle存储过程中的select与参数详细说明

 

create or replace procedure pro_test

  is

  begin

  select * from t_test;

  end pro_test;

  这个存储过程正确吗?

  昨天因为这个,耽误了好久(在一个存储过程中用了select语句,但既没有用游标也没有用into).

  在存储过程(oracle数据库教程)中如果用了select语句,要么使用"select into 变量"语句要么使用游标,oracle不支持单独的select语句(如表述有误请指出).

  select into 比较简单,但是如果返回的是一个结果集就无法满足要求了.

  游标分cursor型游标和sys_refcursor型游标两种

  cursor型游标--不能用于参数传递

  create or replace procedure pro_test() is

  cusor_1 cursor is select 字段名 from 表名 where 条件;

  (或者

  select class_name into cursor_2 from class where ...;

  cursor的另一种用法,需要写在begin和end之间)

  begin

  select class_name into cursor_2 from class where ...;

  可以使用

  for xxx in cursor

  loop

  ....

  end loop; --对cursor进行遍历

  end pro_test;

  sys_refcursor型游标

  create or replace procedure pro_test(rscursor out sys_refcursor) is

  cursor sys_refcursor;

  name varhcar(20);

  begin

  open cursor for

  select name from student where ...; --使用open来打开进行赋值

  --遍历

  loop

  fetch cursor into name --fetch into来打开遍历的每条数据

  exit when cursor%notfound; --未找到记录信息

  dbms_output.putline(xxxx);

  end loop;

  rscursor := cursor;

  end pro_test;

如何在存储过程中调用其他的存储过程(这些都是带参数的)

 

一个带参数的存储过程。
sql> create or replace procedure helloworld1 (
  2    p_user_name  varchar2
  3  ) as
  4  begin
  5     dbms_output.put_line('hello ' || p_user_name || '!');
  6  end helloworld1;
  7  /

procedure created.

sql> create or replace procedure callhelloworld1 (
  2    p_user  varchar2
  3  ) as
  4  begin
  5    -- 调用存储过程的 存储过程
  6    helloworld1(p_user);
  7  end callhelloworld1;
  8  /

procedure created.

执行
sql> set serveroutput on
sql> exec callhelloworld1( 'tom' );
hello tom!

pl/sql procedure successfully completed.

时间: 2024-09-25 13:19:11

oracle存储过程中的select与参数详细说明的相关文章

mysql-Mysql存储过程中怎么判断传入参数与自定义字符串的值相等(新人求助)

问题描述 Mysql存储过程中怎么判断传入参数与自定义字符串的值相等(新人求助) CREATE DEFINER=root@localhost PROCEDURE kkk(biaoshi varchar(10)) BEGIN set @count="1"; if(biaoshi.equals(@count)) then select 2; else select 1; end if; END 系统报错 :21:52:28 call kkk('1') Error Code: 1305. F

Oracle存储过程中如何调用dll

问题描述 想在oracle存储过程中调用c#.net编写的一个dll:该DLL返回一个dataTable,在存储过程中操作dataTable,请问可以实现么?现在怎么用oracle调用dll都不会,请大家指点一二!谢谢!

如何在oracle存储过程中进行简单动态查询

在存储过程中做简单动态查询代码 ,例如: CREATE OR REPLACE procedure ZXM_SB_GZ_GET (p_table in varchar2, p_name in varchar2, p_value in varchar2, outpara out lntxdba.zxm_pag_cs_power.c_type ) as begin declare wherevalue varchar2(200): begin wherevalue:=select * from ||p

Oracle存储过程中使用临时表

原文地址: http://sosuny.javaeye.com/blog/551006   一.Oracle临时表知识   在Oracle中,临时表分为SESSION.TRANSACTION两种,SESSION级的临时表数据在整个SESSION都存在,直到结束此次SESSION:而 TRANSACTION级的临时表数据在TRANACTION结束后消失,即COMMIT/ROLLBACK或结束SESSION都会清除 TRANACTION临时表数据.  1) 会话级临时表 示例  1创建 Sql代码 

Oracle存储过程中的角色

角色(数据库权限集)与存储过程.函数和数据包之间的交互方式是Oracle安全模型中最难以处理的一个部分.Oracle中的对象权限可以直接或通过角色间接授予用户. 假设一个HR用户向用户ABEL授予EMPLOYEES表的一些许可: GRANT select, insert, update, delete 这个语句直接把上述四个权限授予给用户ABEL.另一方面,假设一名HR用户这样做: GRANT select, insert, update, delete ON employees TO hr_r

如何在Oracle存储过程中拥有role权限

我们知道,用户拥有的role权限在存储过程是不可用的.如: SQL> select * from dba_role_privs where grantee='SUK'; GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE------------ ------------SUK DBA NO YESSUK CONNECT NO YESSUK RESOURCE NO YES 用户SUK拥有DBA这个role 再创建一个测试存储过程: create or re

如何在Oracle存储过程中调用Java方法

存储过程中调用Java程序段 软件环境: 1.操作系统:Windows 2000 Server 2.数 据 库:Oracle 8i R2 (8.1.7) for NT 企业版 3.安装路径:C:\ORACLE 实现方法: 1.创建一个文件为Test.java public class Test { public static void main(String args[]) { System.out.println("HELLO THIS iS A Java PROCEDURE"):

ORACLE 存储过程中的Authid Current_User

ORACLE用户具有DBA权限,却会出现无法在存储过程里面创建一张普通表的现象.因为即使用户拥有DBA权限,用户拥有的role权限在存储过程是不可用的. 遇到这种情况,通常解决方法是进行显式的权限分配: grant create table to user a;但这种方法太麻烦,因为有可能执行一个存储过程,需要很多不同权限.实际上,oracle给我们提供了在存储过程中使用role权限的方法:修改存储过程,加入Authid Current_User进行权限分配. 在ORACLE8i以前的版本,所有

Oracle存储过程中去掉重复字符串函数

以下函数是本人在编写Oracle数据库存储过程时写的函数,觉得该函数通用性较强,因此发表出来供需要的人参考. 这个函数的功能主要是用于去除给定字符串中重复的字符串.在使用中需要指定字符串的分隔符.示例: str := MyReplace('13,14,13,444', ','); 输出: 13,14,444create or replace function MyReplace(oldStr varchar2, sign varchar2) return varchar2 is str varc