當前位置:首頁 » 存儲配置 » 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、在要調試的存儲過程右鍵,選擇編輯以進行調試。

熱點內容
照片視頻加密 發布:2024-10-05 23:58:58 瀏覽:477
北京java培訓班多少錢 發布:2024-10-05 23:49:03 瀏覽:813
subversion源碼安裝 發布:2024-10-05 23:48:17 瀏覽:120
ipad文件怎麼解壓縮 發布:2024-10-05 23:06:28 瀏覽:165
存儲伺服器主控晶元 發布:2024-10-05 23:04:33 瀏覽:571
php學徒 發布:2024-10-05 23:04:30 瀏覽:440
活字格手機端清除緩存了什麼辦 發布:2024-10-05 23:03:23 瀏覽:872
阿杜訪問 發布:2024-10-05 22:44:23 瀏覽:602
我的世界怎麼在別的伺服器開掛 發布:2024-10-05 22:31:14 瀏覽:295
下沉演算法 發布:2024-10-05 21:59:43 瀏覽:997