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