當前位置:首頁 » 服務存儲 » oracle存儲函數
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

oracle存儲函數

發布時間: 2022-01-17 08:12:43

Ⅰ 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中的存儲過程與函數

函數是有返回值的,存儲過程沒有。
在BODY中的話,一般函數都是SELECT語句,而存儲過程是包括DML語句的。

Ⅲ oracle怎麼導出function和procere,即函數和存儲過程

使用oracle的一般都裝了PL/sql吧,對象窗口,找到對應的函數或者存儲過程,右鍵查看或編輯。

一般單個我是這么用,如果很多的話可以參考一下網上提供的方法:

oracle 導出一個用戶下的所有存儲過程
方法一:
set echo off ;
set heading off ;
set feedback off ;
spool d:\tmp.txt
select text from user_source ;
spool off;
方法二:
使用PL/SQL 菜單 Tools --> Export user objects... ,對彈出的dialog中選擇user和output file,選中要導出的內容,點擊export導出就行了

Ⅳ oracle函數和存儲過程有什麼區別

一、主體不同

1、函數:當需要分析數據清單中的數值是否符合特定條件時,使用資料庫工作表函數。

2、存儲過程:是在大型資料庫系統中,一組為了完成特定功能的SQL 語句集,存儲在資料庫中,一次編譯後永久有效。

二、特點不同

1、函數:只能返回一個變數,可以嵌入sql中和存儲過程中使用。

2、存儲過程:用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行。存儲過程是資料庫中的一個重要對象。在數據量特別龐大的情況下利用存儲過程能達到倍速的效率提升。


三、功能不同

1、函數:不能用臨時表,只能用表變數,函數不能執行一組修改全局資料庫狀態的操作。可以作為查詢語句的一個部分來調用,由於函數可以返回一個表對象,所以在查詢中位於from關鍵字後面。

2、存儲過程:存儲過程需要讓sql的query可以執行,存儲過程可以返回參數,如記錄集。sql語句中不可以含有存儲過程。


Ⅳ Oracle 存儲過程和函數的區別

1. 返值區別,函數1返值,存儲程通參數返,或者沒
2.調用區別,函數查詢語句直接調用,存儲程必須單獨調用.
函數般情況用計算並返計算結存儲程般用完特定數據操作(比修改、插入資料庫表或執行某些DDL語句等等)

Ⅵ oracle中定義存儲過程和函數,到底有什麼用

就是在後台代碼訪問資料庫時,如果有個操作需要多條SQL語句才能實現,你說在後台代碼中多次訪問資料庫的效率高還是直接調用那個函數或者存儲過程效率高呢?

Ⅶ oracle 怎樣查看已經存在的函數

①登錄用戶後,執行下面語句查看當前用戶有哪些存儲過程:

select name from user_source where type='PROCEDURE';

或者:select object_name from user_proceres;

或者:select object_name from user_objects where object_type='PROCEDURE' ;

②找到你所要查詢的存儲過程名字後,執行下面操作,可以看到存錯過程內容:

select text from user_source where name ='xxxx';--(xxxx代表所要查詢的存儲過程名字)

Ⅷ oracle如何在函數中調用存儲過程

函數中調用存儲過程報錯,多半是由於函數的執行用戶,沒有授權insert 許可權。

Ⅸ oracle里 存儲過程和存儲函數 都能做簡單查詢嗎

存儲函數中建議別做,給以個例子給你
CREATE OR REPLACE PROCEDURE SELECTGROUP(P_ALLGROUP OUT SYS_REFCURSOR) IS
BEGIN
OPEN P_ALLGROUP FOR
SELECT S.GROUPID, S.GROUPNAME, S.GROUPBZ, COUNT(1) GROUPCOUNT
FROM AAA S, BBB A
WHERE S.GROUPID = A.GROUPID
GROUP BY S.GROUPID, S.GROUPNAME, S.GROUPBZ;
END SELECTALLGROUP;

Ⅹ oracle 怎麼執行存儲過程跟函數

調用oracle存儲過程用begin...end的方式。
基本語法:
begin 存儲過程名(參數1,參數2……);--如果無參數則省略括弧及括弧內部分end;

如,有存儲過程:
create or replace procere p_testasv_begintime varchar2(20);v_endtime varchar2(20);v_str varchar2(10);begin v_begintime:=to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'); select 'badkano' into v_str from al; v_endtime:=to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'); dbms_output.put_line('開始時間為:'||v_begintime); dbms_output.put_line('結束時間為:'||v_endtime);end;

執行:begin p_test;end;