oracle存儲過程查詢表
㈠ 用oracle存儲過程將一張表的數據查出插入另一張表
1、創建測試表,
create table test_tbl_1(id number, value varchar2(20));
create table test_tbl_2(id number, value varchar2(20));
㈡ oracle 怎麼在存儲過程中查詢數據
oracle資料庫中,已建立好的存儲過程信息存儲在系統表ALL_SOURCE 中,需要用sysdba身份登錄資料庫,進行查詢操作,sql命令如下:
1
2
3
4
5
SELECT line,text FROM ALL_SOURCE
WHERE TYPE='PROCEDURE'
AND NAME='過程名稱'
AND OWNER='用戶名'
ORDER BY line;
存儲過程分成多行,每一行會存儲為一條數據,所以,查詢出來的會是多行,line表示行號。
ALL_SOURCE 表中還存儲了以下類型信息:
1
2
3
4
5
6
7
8
9
10
SQL> select distinct type from all_source ;
TYPE
------------
TYPE (對象)類型
TYPE BODY 類型體
PROCEDURE <a href="https://www..com/s?wd=%E5%AD%98%E5%82%A8%E8%BF%87%E7%A8%8B&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-TLwGUv3EnW6srHTsrjnz" target="_blank" class="-highlight">存儲過程</a>
FUNCTION 函數
TRIGGER <a href="https://www..com/s?wd=%E8%A7%A6%E5%8F%91%E5%99%A8&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-TLwGUv3EnW6srHTsrjnz" target="_blank" class="-highlight">觸發器</a>
PACKAGE 包
PACKAGE BODY 包體
㈢ oracle中怎麼查找指定表所涉及的存儲過程 急,在線等
在PLSQL 中我用select * from user_tables可以查詢到當前用戶下的存在的表,怎樣查詢到這個資料庫所有用戶下存在的表名
查詢資料庫中所有的表:
select * from all_tables;
查詢當前DBA用戶所能看到的表:
select * from dba_tables;
查詢oracle中所有的表的列名:
select * from all_tab_columns ct where ct.TABLE_NAME='sys_notify_task' ;
select * from all_tab_cols s where s.owner='stock';
㈣ oracle存儲過程中查詢動態表名
先建立結果表,也就是存放你最終結果的表
createtabletest
(avarchar2(100),
bvarchar2(100));
然後建立存儲過程
createprocerep_insert
as
cursorcur_tbnameis
select'insertintotestselectcol1,col2from'||table_name
fromuser_tableswheretable_namelike'AA____BB';--這個位置的表名必須大寫的A和B,col1和col2換成你實際的欄位名稱
begin
opencur_tbname;
loop
fetchcur_tbnameintov_sql;
exitwhencur_tbname%notfound;
executeimmediatev_sql;
commit;
endloop;
end;
我最終沒測試,你自己測試一下,看哪有問題吧
㈤ oracle存儲過程 查詢
oracle下,不能像SQL SERVER那樣直接在存儲過程里返回一個列表結果的結果集,可以考慮用游標輸出參數返回輸出結果集,然後再調用游標來循環顯示結果集(請參考下面的示例):
假設你的表的結構這樣:
create table we_temp1(id int,name varchar(20))
那建立存儲過程如下:
create or replace procere wy_temp
(
o_result out sys_refcursor
)
is
begin
open o_result for select * from we_temp1;
end wy_temp;
調用存儲過程並顯示游標的結果集:
declare
v_result sys_refcursor;
v_id int;
v_name varchar2(20);
begin
wy_temp(v_result);
loop
fetch v_result into v_id,v_name;
exit when v_result%notfound;
dbms_output.put_line('列id的值:'||to_char(v_id));
dbms_output.put_line('列name的值:'||v_name);
end loop;
close v_result;
exception
when others then
dbms_output.put_line(sqlerrm);
end;
㈥ oracle中怎麼查詢包中的某個存儲過程中所有用到的表
顯示的可以找到,例如遍歷 程序內容。
隱式的例如 程序里用了view,view里包含了很多表,那麼直接看程序沒用。
必須跑一邊過程,然後TRACE獲得列表,例如10046.
㈦ 在Oracle中如何查詢一個表空間下所有的存儲過程啊或者是一個用戶下面所有的存儲過程
一個用戶下面所有的存儲過程:
如果有DBA許可權
select * from DBA_objects where object_type='PROCEDURE' and owner='user_name'
否則就all_objects
一個表空間下所有的存儲過程:
這個應該沒有意義
㈧ 怎麼用oracle存儲過程查一個表的信息
Oracle 需要通過 返回一個游標來處理。
SQL> create or replace package pkg_HelloWorld as
2 -- 定義ref cursor類型
3 type myrctype is ref cursor;
4 --函數申明
5 function getHelloWorld return myrctype;
6 end pkg_HelloWorld;
7 /
Package created.
SQL> CREATE OR REPLACE package body pkg_HelloWorld as
2 function getHelloWorld return myrctype
3 IS
4 return_cursor myrctype;
5 BEGIN
6 OPEN return_cursor FOR 'SELECT ''Hello'' AS a, ''World'' AS B FROM al';
7 return return_cursor;
8 END getHelloWorld;
9 end pkg_HelloWorld;
10 /
Package body created.
SQL> SELECT pkg_HelloWorld.getHelloWorld FROM al;
GETHELLOWORLD
--------------------
CURSOR STATEMENT : 1
CURSOR STATEMENT : 1
A B
---------- ----------
Hello World
上面的是使用動態SQL處理的。
下面是正常SQL處理的。
SQL> create or replace package pkg_HelloWorld as
2 -- 定義ref cursor類型
3 type myrctype is ref cursor;
4 --函數申明
5 function getHelloWorld return myrctype;
6 end pkg_HelloWorld;
7 /
程序包已創建。
SQL> CREATE OR REPLACE package body pkg_HelloWorld as
2 function getHelloWorld return myrctype
3 IS
4 return_cursor myrctype;
5 BEGIN
6 OPEN return_cursor FOR
7 SELECT 'Hello 1' AS a, 'World 1' AS B FROM al
8 UNION ALL
9 SELECT 'Hello 2' AS a, 'World 2' AS B FROM al;
10 return return_cursor;
11 END getHelloWorld;
12 end pkg_HelloWorld;
13 /
程序包體已創建。
返回遊標的函數,不是 「表值函數」
SQL> SELECT * FROM pkg_HelloWorld.getHelloWorld();
SELECT * FROM pkg_HelloWorld.getHelloWorld()
*
第 1 行出現錯誤:
ORA-00933: SQL 命令未正確結束
SQL> SELECT pkg_HelloWorld.getHelloWorld() FROM al;
PKG_HELLOWORLD.GETHE
--------------------
CURSOR STATEMENT : 1
CURSOR STATEMENT : 1
A B
------- -------
Hello 1 World 1
Hello 2 World 2