當前位置:首頁 » 存儲配置 » oracle存儲過程列印

oracle存儲過程列印

發布時間: 2022-04-23 17:05:19

Ⅰ 如何將ORACLE存儲過程中sql的結果集列印出來,並且按照一定的格式封裝到一個字元串中呢

這就用上了遞歸的思想,思路如下,沒有你的數據如果有問題你調試下
V_SQL='select * from (
select REPLACE(SYS_CONNECT_BY_PATH(a,','),',') , LEVEL from (
SELECT OBJECT_ID || ''|''||
OBJECT_NAME || ''|''||
PHASE_ID || ''|''||
BUSI_TYPE || ''|''||
BUSI_NAME || ''|''||
BUSI_SUBCLASS_CODE || ''|''||
BUSI_SUBCLASS_NAME || ''|''||
BUSI_CLASSIFI_CODE || ''|''||
BUSI_CLASSIFI_NAME || ''|''||
BRAND_TYPE || ''|''||
CODE_NAME || ''|''||
RULER_OPTI || ''|''||
RULER_CENT || ''|''||
DONE_DATE || ''|''||'';'' a
FROM KH.KF_IVR_BUSI_CALCULATE S WHERE S.PHASE_ID=' || V_MONTH ||
' AND S.OBJECT_ID=' || V_OP_ID || ')
START WITH ROWNUM =1
CONNECT BY PRIOR rn +1= rn ORDER BY LEVEL DESC )
WHERE ROWNUM < 2 ';

Ⅱ 如何把oracle 存儲過程 輸出到文本

分幾個步驟
1,創建輸出路徑,比如你要在c盤test目錄下輸出,你就先要建立好這個test路徑

2,sqlplus下以sysdba登錄,執行以下語句

3,create or replace directory TMP as 'c: est'

4,grant read,write on directory TMP to 你要生成文件的用戶;

5,alter system set utl_file_dir='c: est' scope=spfile;
以上步驟執行完,需要重啟資料庫

6,最重要的一步開始了,創建存儲過程

createorreplacePROCEDURESP_OUTPUT
is
file_handleutl_file.file_type;
Write_contentVARCHAR2(1024);
Write_file_nameVARCHAR2(50);
v_idint;
v_formvarchar2(10);
cursorcur_sp_out
is
selectid,formfroma;
begin
opencur_sp_out;
loop
fetchcur_sp_outintov_id,v_form;
exitwhencur_sp_out%notfound;
write_file_name:=to_char(SYSDATE,'MMDD')||'.txt'
file_handle:=utl_file.fopen('TMP',write_file_name,'a');
write_content:=v_id||''||v_form;
--writefile
IFutl_file.is_open(file_handle)THEN
utl_file.put_line(file_handle,write_content);
ENDIF;
--closefile
utl_file.fclose(file_handle);
endloop;
closecur_sp_out;
end;


我建立了一個跟你一樣的測試表,數據如下
createtablea(idint,
formvarchar2(10));

insertintoavalues(1,'你好');
insertintoavalues(2,'你很好');


然後執行存儲過程
begin
SP_OUTPUT;
end;


執行完畢後,你在c盤test路徑下會發現已經有新文件生成


文件內容


存儲過程的話,如果表名和欄位名跟你一致的話,你無須修改

Ⅲ 寫Oracle存儲過程,按照yyyy/mm/dd hh:mm:ss格式列印系統當前日期

declare
v_datevarchar2(20);
begin
selectto_char(sysdate,'yyyy/mm/ddhh24:mi:ss')intov_datefromal;
dbms_output.put_line(v_date);
end;

Ⅳ Oracle存儲過程及舉例(幾種參數情況的存儲

create table TESTTABLE
(
id1 VARCHAR2(12),
name VARCHAR2(32)
)
select t.id1,t.name from TESTTABLE t
insert into TESTTABLE (ID1, NAME)
values ('1', 'zhangsan');

insert into TESTTABLE (ID1, NAME)
values ('2', 'lisi');

insert into TESTTABLE (ID1, NAME)
values ('3', 'wangwu');

insert into TESTTABLE (ID1, NAME)
values ('4', 'xiaoliu');

insert into TESTTABLE (ID1, NAME)
values ('5', 'laowu');
---創建存儲過程
create or replace procere test_count
as
v_total number(1);
begin
select count(*) into v_total from TESTTABLE;
DBMS_OUTPUT.put_line('總人數:'||v_total);
end;
--准備
--線對scott解鎖:alter user scott account unlock;
--應為存儲過程是在scott用戶下。還要給scott賦予密碼
---alter user scott identified by tiger;
---去命令下執行
EXECUTE test_count;
----在ql/spl中的sql中執行
begin
-- Call the procere
test_count;
end;

create or replace procere TEST_LIST
AS
---是用游標
CURSOR test_cursor IS select t.id1,t.name from TESTTABLE t;
begin
for Test_record IN test_cursor loop---遍歷游標,在列印出來
DBMS_OUTPUT.put_line(Test_record.id1||Test_record.name);
END LOOP;
test_count;--同時執行另外一個存儲過程(TEST_LIST中包含存儲過程test_count)
end;
-----執行存儲過程TEST_LIST
begin
TEST_LIST;
END;
---存儲過程的參數
---IN 定義一個輸入參數變數,用於傳遞參數給存儲過程
--OUT 定義一個輸出參數變數,用於從存儲過程獲取數據
---IN OUT 定義一個輸入、輸出參數變數,兼有以上兩者的功能
--這三種參數只能說明類型,不需要說明具體長度 比如 varchar2(12),defaul 可以不寫,但是作為一個程序員最好還是寫上。

---創建有參數的存儲過程
create or replace procere test_param(p_id1 in VARCHAR2 default '0')
as v_name varchar2(32);
begin
select t.name into v_name from TESTTABLE t where t.id1=p_id1;
DBMS_OUTPUT.put_line('name:'||v_name);
end;
----執行存儲過程
begin
test_param('1');
end;

default '0'

---創建有參數的存儲過程
create or replace procere test_paramout(v_name OUT VARCHAR2 )
as
begin
select name into v_name from TESTTABLE where id1='1';
DBMS_OUTPUT.put_line('name:'||v_name);
end;
----執行存儲過程
DECLARE
v_name VARCHAR2(32);
BEGIN
test_paramout(v_name);
DBMS_OUTPUT.PUT_LINE('name:'||v_name);
END;
-------IN OUT
---創建存儲過程
create or replace procere test_paramINOUT(p_phonenumber in out varchar2)
as
begin
p_phonenumber:='0571-'||p_phonenumber;
end;

----
DECLARE
p_phonenumber VARCHAR2(32);
BEGIN
p_phonenumber:='26731092';
test_paramINOUT(p_phonenumber);
DBMS_OUTPUT.PUT_LINE('新的電話號碼:'||p_phonenumber);
END;
-----sql命令下,查詢當前用戶的存儲過程或函數的源代碼,
-----可以通過對USER_SOURCE數據字典視圖的查詢得到。USER_SOURCE的結構如下:

SQL> DESCRIBE USER_SOURCE ;
Name Type Nullable Default Comments

---- -------------- -------- -------
-------------------------------------------------------------------------------------------------------------
NAME VARCHAR2(30) Y Name of the object

TYPE VARCHAR2(12) Y Type of the object: "TYPE", "TYPE BODY", "PROCEDURE", "FUNCTION",
"PACKAGE", "PACKAGE BODY" or "JAVA SOURCE"
LINE NUMBER Y Line number of this line of
source

TEXT VARCHAR2(4000) Y Source text

SQL>
---查詢出存儲過程的定義語句
select text from user_source WHERE NAME='TEST_COUNT';
----查詢存儲過程test_paramINOUT的參數
SQL> DESCRIBE test_paramINOUT;
Parameter Type Mode Default?
------------- -------- ------ --------
P_PHONENUMBER VARCHAR2 IN OUT
SQL>
---查看當前的存儲過程的狀態是否正確,
---VALID為正確,INVALID表示存儲過程無效或需要重新編譯
SELECT STATUS FROM USER_OBJECTS WHERE OBJECT_NAME='TEST_COUNT';
-----如果要檢查存儲過程或函數的依賴性,可以通過查詢數據字典USER_DENPENDENCIES來確定,該表結構如下:
SQL> DESCRIBE USER_DEPENDENCIES;
Name Type Nullable Default Comments
-------------------- ------------- -------- ------- ----------------------------------------------------------
NAME VARCHAR2(30) Name of the object
TYPE VARCHAR2(17) Y Type of the object
REFERENCED_OWNER VARCHAR2(30) Y Owner of referenced object (remote owner if remote object)
REFERENCED_NAME VARCHAR2(64) Y Name of referenced object
REFERENCED_TYPE VARCHAR2(17) Y Type of referenced object
REFERENCED_LINK_NAME VARCHAR2(128) Y Name of dblink if this is a remote object
SCHEMAID NUMBER Y
DEPENDENCY_TYPE VARCHAR2(4) Y
SQL>
---查詢存儲過程TEST_COUNT的依賴關系
SELECT REFERENCED_NAME,REFERENCED_TYPE FROM USER_DEPENDENCIES WHERE NAME='TEST_COUNT';

Ⅳ oracle存儲過程中利用游標列印臨時表中內容

你用的是那個游標沒用,稍微修改一下。定義也不要。
OPEN CUR_BANKBOOK for 'select RIQI,Currency,Summary,Amount from detailD_E order by RIQI';
for cur_balance IN cur_BANKBOOK LOOP

改成
for cur_balance IN (select RIQI,Currency,Summary,Amount from detailD_E order by RIQI ) loop
open的那個,和 定義的那行就別要了。

Ⅵ oracle變數賦值及列印

oracle變數賦值及列印需要用存儲過程實現。

如:

declare
v_begintimevarchar2(20);
v_endtimevarchar2(20);
v_strvarchar2(10);
begin
v_begintime:=to_char(sysdate,'yyyy-mm-ddhh24:mi:ss');
select'badkano'intov_strfromal;--為v_str變數賦值
v_endtime:=to_char(sysdate,'yyyy-mm-ddhh24:mi:ss');
dbms_output.put_line(v_str||'執行存儲過程開始時間為:'||v_begintime);--列印
dbms_output.put_line(v_str||'執行存儲過程結束時間為:'||v_endtime);--列印
end;

執行結果:

Ⅶ oracle存儲過程如何輸出信息

可用DBMS_OUTPUT.PUT_LINE()對存儲過程的進行輸出。

編寫存儲過程:

create or replace procere test_pro(in_num number)

as

M number;

begin

M := in_num;

if 0 < M then

dbms_output.put_line('輸出SQL語句1');

elsif M < 3 then

dbms_output.put_line('輸出SQL語句2');

else

dbms_output.put_line('nothing');

end if;

end;

(7)oracle存儲過程列印擴展閱讀;

存儲在資料庫的數據字典中,存儲在當前的應用中安全性由資料庫提供安全保證,必須通過授權才能使用存儲子程序,安全性靠應用程序來保證,如果能執行應用程序,就能執行該子程序。模式描述IN參數用來從調用環境中向存儲過程傳遞值,不能給IN參數賦值,給此參數傳遞的值可以是常量、有值的變數、表達式等。

Ⅷ 如何列印 ORACLE存儲過程中的游標數據

不知道樓主的意圖 ,如果是調試 PIRNT 可以輸出數據的!

Ⅸ 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;

熱點內容
壓縮ini 發布:2024-11-19 05:53:31 瀏覽:644
emc存儲圖標 發布:2024-11-19 05:39:03 瀏覽:646
查詢電腦主板配置怎麼看 發布:2024-11-19 05:33:10 瀏覽:464
蘋果手機怎麼查看wifi密碼 發布:2024-11-19 05:26:57 瀏覽:498
上級伺服器ip英語 發布:2024-11-19 05:24:43 瀏覽:329
資料庫是數 發布:2024-11-19 05:16:55 瀏覽:188
linux線程id 發布:2024-11-19 05:05:36 瀏覽:428
雲堡壘伺服器 發布:2024-11-19 05:05:31 瀏覽:340
php高端培訓 發布:2024-11-19 05:04:11 瀏覽:974
源碼智慧路燈 發布:2024-11-19 05:02:33 瀏覽:635