oracle数据库中,已建立好的存储过程信息存储在系统表ALL_SOURCE 中,需要用sysdba身份登录数据库,进行查询操作,SQL命令如下:
SELECTline,textFROMALL_SOURCE
WHERETYPE='PROCEDURE'
ANDNAME='过程名称'
ANDOWNER='用户名'
ORDERBYline;
存储过程分成多行,每一行会存储为一条数据,所以,查询出来的会是多行,line表示行号。
ALL_SOURCE 表中还存储了以下类型信息:
SQL>selectdistincttypefromall_source;
TYPE
------------
TYPE(对象)类型
TYPEBODY类型体
PROCEDURE存储过程
FUNCTION函数
TRIGGER触发器
PACKAGE包
PACKAGEBODY包体
② 如何查看ORACLE包体内的存储过程
1、打开PL/SQL,新建sql窗口
③ 如何查询oracle库中已经存在的存储过程
命令行:
sqlplus / as sysdba
select name from user_source where type='PROCEDURE';
可查看sys用户下所有存储过程名字
select text from user_source where name='XXX'
可查看该存储过程的内容
plSQLdevloper工具:
左侧找到‘Proceres’,点开之后即可查看当前用户的所有存储过程。
右键点击存储过程,选择‘view’可查看详细信息
④ 如何查看ORACLE数据库剩余空间
1. 查看所有表空间大小
SQL> select tablespace_name,sum(bytes)/1024/1024 || 'M' from dba_data_files
group by tablespace_name;
2. 已经使用的表空间大小
SQL> select tablespace_name,sum(bytes)/1024/1024 || 'M'
from dba_free_space
group by tablespace_name;
3. 所以使用空间可以这样计算
select a.tablespace_name,total,free,total-free used from
( select tablespace_name,sum(bytes)/1024/1024 || 'M'
total from dba_data_files
group by tablespace_name) a,
( select tablespace_name,sum(bytes)/1024/1024|| 'M' free from dba_free_space
group by tablespace_name) b
where a.tablespace_name=b.tablespace_name;
4. 下面这条语句查看所有segment的大小。
Select Segment_Name,Sum(bytes)/1024/1024 From User_Extents Group By Segment_Name
5. 还有在命令行情况下如何将结果放到一个文件里。
SQL> spool out.txt
SQL> select * from v$database;
SQL> spool off
⑤ 怎么查看oracle里有哪些数据库,以及数据库里有哪些表
通过以下方式可以查看oracle里有哪些数据库,以及数据库里有哪些表:
1、SELECT * FROM ALL_TABLES;系统里有权限的表。
2、SELECT * FROM DBA_TABLES; 系统表。
3、SELECT * FROM USER_TABLES; 当前用户下的表。
⑥ 如何查看Oracle表以及索引的存储空间
查看表占用空间
SELECT SEGMENT_NAME TABLE_NAME
,SUM(BLOCKS) BLOCKS
,SUM(BYTES)/(1024*1024) "TABLE_SIZE[MB]"
FROM USER_SEGMENTS
WHERE SEGMENT_TYPE='TABLE'
AND SEGMENT_NAME=&TABLE_NAME
GROUP BY SEGMENT_NAME;
索引占用空间
SELECT SEGMENT_NAME TABLE_NAME
,SUM(BLOCKS) BLOCKS
,SUM(BYTES)/(1024*1024) "TABLE_SIZE[MB]"
FROM DBA_SEGMENTS
WHERE SEGMENT_TYPE='INDEX'
AND SEGMENT_NAME=&TABLE_NAME
GROUP BY SEGMENT_NAME;
⑦ 如何查看oracle的存储过程
使用tode或者Navicat 或者navigtor等连接oracle的工具
找到procere的选项即可查看所有的存储过程,点击某个名字可以看到其中的定义
⑧ oracle数据库数据存储与数据查询
单次更新的 SQL 语句:
(只更新 B1 部分)
UPDATE
A
SET
b1 = CASE
WHEN (a16='x' OR a17='x' OR a18='x' OR a19='x') THEN 'x'
WHEN (a16='o' OR a17='o' OR a18='o' OR a19='o')
AND a16!='x' AND a17!='x' AND a18!='x' AND a19!='x' THEN 'o'
WHEN (a16='√' AND a17='√' AND a18='√' AND a19='√') THEN '√'
ELSE '?'
END;
如果上述表建好后,有其它记录值数据插入到表A的a1,a2,a16,a17,a18,a19,a20,a24,a26,a46字段中后,要求表A的字段b1和b2也按照上述规则存储相应的值,这用sql语句又该怎么实现呢?
使用触发器(只更新 B1 部分)
CREATE OR REPLACE TRIGGER TRBeforeInsertA
BEFORE INSERT ON A
FOR EACH ROW
BEGIN
IF :new.a16='x' OR :new.a17='x'
OR :new.a18='x' OR :new.a19='x' THEN
:new.b1 := 'x';
ELSIF (:new.a16='o' OR :new.a17='o'
OR :new.a18='o' OR :new.a19='o')
AND :new.a16!='x' AND :new.a17!='x'
AND :new.a18!='x' AND :new.a19!='x' THEN
:new.b1 := 'o';
ELSIF :new.a16='√' AND :new.a17='√'
AND :new.a18='√' AND :new.a19='√' THEN
:new.b1 := '√';
ELSE
:new.b1 := '?';
END IF;
END;
测试数据.
INSERT INTO A (a16, a17, a18, a19) VALUES ('x','o','o','o');
INSERT INTO A (a16, a17, a18, a19) VALUES ('o','x','o','o');
INSERT INTO A (a16, a17, a18, a19) VALUES ('o','o','x','o');
INSERT INTO A (a16, a17, a18, a19) VALUES ('o','o','o','x');
INSERT INTO A (a16, a17, a18, a19) VALUES ('o','o','o','√');
INSERT INTO A (a16, a17, a18, a19) VALUES ('o','o','√','√');
INSERT INTO A (a16, a17, a18, a19) VALUES ('o','√','√','√');
INSERT INTO A (a16, a17, a18, a19) VALUES ('√','√','√','√');
查询触发器正确性
SQL> SELECT
2 a16, a17, a18, a19, b1
3 FROM
4 A;
A16 A17 A18 A19 B1
---- ---- ---- ---- ----
x o o o x
o x o o x
o o x o x
o o o x x
o o o v o
o o v v o
o v v v o
v v v v v
8 rows selected.