当前位置:首页 » 存储配置 » oracle存储过程type

oracle存储过程type

发布时间: 2022-07-30 07:27:10

① Oracle数据库存储过程怎么写

1 CREATE OR REPLACE PROCEDURE 存储过程名
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体的结束.
存储过程创建语法:
create or replace procere 存储过程名(param1 in type,param2 out type)
as
变量1 类型(值范围); --vs_msgVARCHAR2(4000);
变量2 类型(值范围);
Begin
Select count(*) into 变量1 from 表A where列名=param1;

If (判断条件) then
Select 列名 into 变量2 from 表A where列名=param1;
Dbms_output。Put_line(‘打印信息’);
Elsif (判断条件) then
Dbms_output。Put_line(‘打印信息’);
Else
Raise 异常名(NO_DATA_FOUND);
End if;
Exception
When others then
Rollback;
End;

② 如何运行和调试Oracle存储过程

1. 编写Oracle存储过程脚步如下:CREATE OR REPLACE PROCEDURE P_AUTO_CREATE_PARTITION (Result Out int, LogErrDesc Out varchar2 ) is type TypeTable is table of varchar2(20); CreatePartitionErr exception; days TypeTable; BEGIN Result := 0; SELECT DATETIME bulk collect into days FROM ( SELECT TO_CHAR(TRUNC(SYSDATE-2,'dd'),'YYYYMMDD') AS DATETIME FROM DUAL UNION SELECT TO_CHAR(TRUNC(SYSDATE-1,'dd'),'YYYYMMDD') AS DATETIME FROM DUAL UNION SELECT TO_CHAR(TRUNC(SYSDATE,'dd'),'YYYYMMDD') AS DATETIME FROM DUAL UNION SELECT TO_CHAR(TRUNC(SYSDATE+1,'dd'),'YYYYMMDD') AS DATETIME FROM DUAL UNION SELECT TO_CHAR(TRUNC(SYSDATE+2,'dd'),'YYYYMMDD') AS DATETIME FROM DUAL ); for i in 1..days.count loop if bruce_partiton.CreatePartitions('T_CDT_1X_BASIC_Partion',days(i))<0 then raise CreatePartitionErr; end if; end loop; --名字写错了bruce_partiton,应该为bruce_partition commit; --异常处理 EXCEPTION WHEN CreatePartitionErr THEN rollback; Result := -1; LogErrDesc := SQLERRM; commit; RETURN; WHEN OTHERS THEN rollback; Result := -2; LogErrDesc := 'CDM_CTCALLTRACEINFO_PRC_NEW Fail!'||substr(dbms_utility.format_error_stack,1,200); commit; RETURN; END P_AUTO_CREATE_PARTITION; / 2. 调试 在PL/SQL中选择存储过程,右键TEST, ADD DEBUGINFO,3. 运行,在Program Window中

③ oracle 存储过程

create or replace procere sp_add_emp2( --创建名为sp_add_emp2存储过程
v_empno emp.empno%type, --------- 传入存储过程中的参数
v_ename emp.ename%type,
v_deptno dept.deptno%type,
v_dname dept.dname%type,

num out number ----------存储过程执行完毕后返回的值
)as
num1 number; ------自定义变量
num2 number;
begin
--查询dept表中的数据总共有多少行,赋值给num1,
--条件是字段deptno等于v_deptno(传进来的参数)
select count(*) into num1 from dept where deptno=v_deptno;
if(num1=0) then --如果没数据
--则给dept表的deptno 和dname列插入一条数据,值为v_deptno,v_dname
insert into dept(deptno,dname) values(v_deptno,v_dname);
end if; --If语句结束语
---同上。
select count(*) into num2 from emp where empno=v_empno;
if(num2=0)then
insert into emp(empno,ename,deptno) values(v_empno,v_ename,v_deptno);
else --如果查询到有数据则提示错误信息,员工ID重复,不插入数据
raise_application_error(-202021,'员工id 重复!!!');
end if;

num:=num1; --定义的输出参数等于num1。
commit; --结束存储过程。

④ ORACLE 使用存储过程或者函数返回TYPE

C#调用oracle存储过程 最简单的实例

Oracle方面
1.创建Oracle过程存储
create or replace procere proce_test(paramin in varchar2,paramout out varchar2,paraminout in out varchar2)
as
varparam varchar2(28);
begin
varparam:=paramin;
paramout:=varparam|| paraminout;
end;
2.测试过程存储
declare
param_out varchar2(28);
param_inout varchar2(28);
begin
param_inout:='ff';
proce_test('dd',param_out,param_inout);
dbms_output.put_line(param_out);
end;

C#方面
引用Oracle组件
using System;
using System.Data;
using System.Data.OracleClient;

namespace WebApplication4
{
public class OraOprater
{
private OracleConnection conn=null;
private OracleCommand cmd=null;
public OraOprater()
{
string mConn="data source=ora9i.ora.com;user id=ora;password=ora"; //连接数据库
conn=new OracleConnection(mConn);
try
{
conn.Open();
cmd=new OracleCommand();
cmd.Connection=conn;
}
catch(Exception e)
{
throw e;
}
}

public string SpExeFor(string m_A,string m_B)
{
//存储过程的参数声明
OracleParameter[] parameters={
new OracleParameter("paramin",OracleType.VarChar,20),
new OracleParameter("paramout",OracleType.VarChar,20),
&
nbsp; new OracleParameter("paraminout",OracleType.VarChar,20)
};
parameters[0].Value=m_A;
parameters[2].Value=m_B;
parameters[0].Direction=ParameterDirection.Input;
parameters[1].Direction=ParameterDirection.Output;
parameters[2].Direction=ParameterDirection.InputOutput;
try
{
RunProcere("proce_test",parameters);
return parameters[1].Value.ToString();
}
catch(Exception e)
{
throw e;
}
}

private void RunProcere(string storedProcName,OracleParameter[] parameters)
{
cmd.CommandText=storedProcName;//声明存储过程名
cmd.CommandType=CommandType.StoredProcere;
foreach(OracleParameter parameter in parameters)
{
cmd.Parameters.Add(parameter);
}
cmd.ExecuteNonQuery();//执行存储过程
}
}
}
测试结果:ddff

⑤ oracle中的存储过程怎么写

Oracle存储过程写法实例

总结项目中写的存储过程例子:
Oracle存储过程基本语法 存储过程
1 CREATE OR REPLACE PROCEDURE 存储过程名
2 IS/AS
3 BEGIN
4 NULL;
5 EXCEIPTION;
6 END;

1、创建存储过程,后面可用is或者as:
create or replace procere PRO_COMPLAIN_TEMPLATE as

2、定义变量,此处用到了%TYPE和%ROWTYPE,参考 /database/201211/168564.html ,另外定义了一个游标,TEM_INSTANCE TEMPLATE_CUR%ROWTYPE这个类型定义必须要在游标定义之后:
NEED_DO_FOR_ZL INTEGER;
CURRENT_MAX_ID MEMO_TEMPLET.TEMPLET_ID%TYPE;
CURSOR TEMPLATE_CUR IS SELECT TEMPLET_NAME, TEMPLET_CONTENT FROM SYS_COMPLAINT_TEMPLET;
TEM_INSTANCE TEMPLATE_CUR%ROWTYPE;
3、begin开始块:
begin

4、该插入语句使用了DBLINK,还有使用DBMS_OUTPUT.put_line('打印信息')进行信息输出:
insert into MEMO_TEMPLET (TEMPLET_ID, TEMPLET_CONTENT, TEMPLET_TYPE, TEMPLET_MEMO) (SELECT * FROM MEMO_TEMPLET@COMPANY);

SELECT COUNT(*) INTO NEED_DO_FOR_ZL FROM SYS_COMPLAINT_TEMPLET;
IF(NEED_DO_FOR_ZL > 0) THEN
DBMS_OUTPUT.put_line('打印信息');
SELECT MAX(TEMPLET_ID)+1 INTO CURRENT_MAX_ID FROM MEMO_TEMPLET;
DBMS_OUTPUT.put_line('MEMO_TEMPLET最大ID' || CURRENT_MAX_ID);
FOR TEM_INSTANCE IN TEMPLATE_CUR LOOP
INSERT INTO MEMO_TEMPLET (TEMPLET_ID, TEMPLET_CONTENT,
TEMPLET_TYPE, TEMPLET_MEMO) VALUES (CURRENT_MAX_ID,
TEM_INSTANCE.TEMPLET_CONTENT, '7', NULL);
CURRENT_MAX_ID := CURRENT_MAX_ID + 1;
DBMS_OUTPUT.put_line(TEM_INSTANCE.TEMPLET_CONTENT);
END LOOP;
END IF;
COMMIT;
www.2cto.com
4、exception块,使用WHEN OTHERS THEN,其中用raise可显示错误信息:
exception
WHEN OTHERS THEN
DBMS_OUTPUT.put_line('sqlcode : ' ||sqlcode);
raise;
ROLLBACK;
IF TEMPLATE_CUR%ISOPEN THEN
CLOSE TEMPLATE_CUR;
END IF;
DBMS_OUTPUT.put_line('打印信息');
end;

注:关于游标的使用,如果像本例中使用for循环去遍历游标的话则不需要显式的去用open/close
cursor打开和关闭游标,此处会自己处理,如果使用fetch
into的话就需要显式开关游标,另外任意执行一个update操作,用隐式游标sql的属性%found,%notfound,%rowcount,%isopen观察update语句的执行情况,也可以使用来判断游标状态,如IF
TEMPLATE_CUR%ISOPEN THEN。

⑥ 如何向Oracle存储过程中传入%rowtype类型的参数

oracle数据库中,存储过程中

%type和%rowtype常用来在PL/SQL中定义变量。

%type和%rowtype都是在database中定义的类型,使用%type和%rowtype的好处:
1)减少PL/SQL代码的维护成本
2)自适应表结构的变化[比如字段的长度,精度发生变化]

emp是一张表

%ROWTYPE用来声明一个和表中记录一样的record,一个记录声明为具有相同类型的数据库行的作法

如:t_emp emp%rowtype ;

%TYPE用来声明一个变量和指定表的column一样的数据类型

如: t_name emp.name%type;

⑦ 我在Oracle里写了个存储过程。在程序里调用时为什么找不到OracleType

估计你存储过程中没有定义sex及它的类型,要不就是你sex 类型定义错误 不属于oracle数据类型
你可以重新设置下它的类型用个varchar(4)

⑧ oracle存储过程中如何使用数组

首先你需要定义一个数组类型,然后定义这个数组变量
declare
type a_type is table of number;
-- type a_type is array(10) of number;
-- 下面一种定义方式则指定了该数组的最大元素个数

a a_type := a_type(); -- 定义并初始化一个数组变量
begin
a.extend(3); -- 数组扩展到3个元素
a(1) := 1;
a(2) := 10;
a(3) := 100;
end;

另外数组还有一下方法和属性
first -- 第一个元素下标
last -- 最后一个元素下标
count -- 数组元素个数
prior(n) -- 下标 n 的前一个元素下标
next(n) -- 下标 n 后一个元素下标
extend(n) -- 添加 n 个数组元素,不带参数添加一个数组元素
delete(n) -- 删除数组中下标为 n 的元素,不带参数删除整个数组元素

⑨ Oracle 存储过程中 %type 是什么意思

Oracle 存储过程中 %type 是设置错误造成的,解决方法为:

1、在要调试的存储过程右键,选择编辑以进行调试。

热点内容
保卫萝卜有脚本吗 发布:2025-01-13 06:30:29 浏览:741
天猫上传 发布:2025-01-13 06:06:35 浏览:156
php处理并发 发布:2025-01-13 06:03:44 浏览:282
安卓传文件的软件哪个最好 发布:2025-01-13 06:03:07 浏览:885
电脑服务器可以做吗 发布:2025-01-13 05:59:49 浏览:846
前端配置代理的时候怎么看端口 发布:2025-01-13 05:57:25 浏览:910
同桌的你文学脚本 发布:2025-01-13 05:42:12 浏览:746
32位加密算法 发布:2025-01-13 05:39:48 浏览:310
脚本写入软件 发布:2025-01-13 05:36:49 浏览:63
快手自动算法 发布:2025-01-13 05:28:41 浏览:120