下午没事写了个简单的存储过程,功能:查看当前用户所有表信息存储过程(输出在控制台)
刚开始考虑使用 execute immediate str_sql; 后考虑到与需求不符,放弃
用到了 动态游标,record, 代码很粗拙,请大家多指点!
create or replace procedure print_tablesinfo3
as
str_sql varchar2(500);
-- 创建一个数据行类型
type rowdata is record (col_name VARCHAR2(30),
col_type VARCHAR2(106),
isnull VARCHAR2(1),
col_desc VARCHAR2(4000)
);
myrow rowdata;
tab_name varchar2(50);--表名
TYPE TCUR IS REF CURSOR; -- 动态游标声明
CUR TCUR;--列信息游标
TAB_CUR TCUR;--表信息游标
v_user varchar2(50);-- 用户名
begin
select user into v_user from dual;--查询当前用户名
dbms_output.put_line('当前用户名: '||v_user);
-- 查询用户的所有表
str_sql := 'select object_name from user_objects where object_type=' || q'!'TABLE'!';
--dbms_output.put_line(str_sql);
open TAB_CUR FOR str_sql;
loop
fetch TAB_CUR into tab_name;
exit when TAB_CUR%notfound;
dbms_output.put_line('');
dbms_output.put_line('表名:'||tab_name);
str_sql := 'select t.COLUMN_NAME,t.DATA_TYPE,t.NULLABLE, col.COMMENTS from user_tab_columns t,user_col_comments col
where col.table_name = t.table_name and
t.COLUMN_NAME = col.COLUMN_NAME and t.TABLE_NAME = '||q'! '!' || tab_name || q'!' !' ;
--dbms_output.put_line(str_sql); -- 调试时用
dbms_output.put_line('列名 '||' 类型 '||' 是否为空 '||' 描述 ');
dbms_output.put_line('=================================');
open CUR FOR str_sql;
loop
fetch cur into myrow;
exit when cur%notfound;
dbms_output.put_line(myrow.col_name || ' ' || myrow.col_type || ' ' || myrow.isnull || ' '||myrow.col_desc );
end loop;
close cur;
--dbms_output.put_line('=================================');
end loop;
close TAB_CUR;
end;
分享到:
相关推荐
本篇文章将深入探讨如何在Oracle存储过程中使用临时表,包括会话级临时表和事务级临时表。 ### 会话级临时表 会话级临时表(Session-Level Temporary Tables)只在创建它的会话内可见,并且在会话结束时自动删除。...
### 存储过程知识点解析 #### 一、存储过程简介 在数据库系统中,存储过程是一种预先编译好的SQL程序,它可以实现复杂的数据处理逻辑,并且可以被多次调用而无需重新编译,从而提高执行效率。存储过程不仅可以包含...
### SQL多表分页存储过程解析 #### 标题与描述概述 该存储过程主要针对SQL Server 2005/2000环境下的多表分页查询进行了实现,并且已在SQL环境下测试通过。其核心功能是为用户提供一种灵活且高效的多表分页查询...
- 然后,将新用户的信息插入到`tableName`表中。注意,插入的字段包括`userID`、`loginID`、`password`、`userName`、`linkNum`、`address`、`email`、`createTime`和`status`,但在这个示例中,`userName`、`...
8. **sp_stored_procedures**:列出当前环境中的所有存储过程。 - 示例:`EXEC sp_stored_procedures` #### 六、用户自定义存储过程示例 假设我们需要创建一个存储过程来获取客户信息: ```sql CREATE PROCEDURE...
- **Owner**:拥有存储过程的用户ID的名称,应为当前用户的名称或当前用户所属的角色的名称。 - **Procedure_name**:新存储过程的名称,必须满足标识符规则,且对于数据库及其所有者必须是唯一的。 - **;number**:...
3. **增强安全性**:通过限制用户对底层数据表的直接访问权限,仅通过特定的存储过程进行数据操作,增强了数据安全性。存储过程定义可以加密,防止非法查看。 4. **减少网络流量**:复杂操作可以通过单条执行存储...
用户存储过程可以完成以下功能:接受输入参数并返回多个输出值、包含若干T-SQL语句,用以完成特定的SQL Server操作,其中可以有对其他存储过程的调用、返回一个指示成功与否及失败原因的状态代码给调用它的过程。...
使用向导创建存储过程需要选择当前服务器,然后执行“工具→向导”菜单命令,选择“创建存储过程向导”项,然后设置存储过程的名称和要执行的操作。 执行存储过程 执行存储过程可以使用 EXECUTE 语句或 sp_execute...
知识点:通用分页存储过程(支持多表) 一、存储过程概述 在数据库管理系统中,存储过程是一种预先编译并存储在数据库中的SQL程序。它能够接收参数,执行一系列操作,如查询、更新数据,并返回结果。存储过程提高...
- `SYSPROCEDURES`、`SYSPROCBODY`、`SYSPROCPLAN`和`SYSPROCAUTH`系统表用于管理和查看存储过程的元数据,包括其代码、执行计划和权限信息。 使用`dbschema`工具可以查看和导出存储过程的源代码。例如,`dbschema ...
此存储过程用于向`book`表中添加新记录,并通过输出参数返回当前表中所有图书的总价。 ##### 实例3:创建临时销售报表 ```sql CREATE PROCEDURE temp_sale AS SELECT a.编号, a.名称, b.数量, b.单价, a.单价 * b....
1. 存储过程接受五个输入参数:@tablename(表名)、@fieldname(字段名,默认为'*'表示所有字段)、@pagesize(每页记录数)、@currentpage(当前页数)、@orderid(主键排序字段),以及两个输出参数:@rowcount...
2. 创建存储过程的权限默认属于数据库所有者,该所有者可将此权限授予其他用户。 3. 存储过程是数据库对象,其名称必须遵守标识符规则。 4. 只能在当前数据库中创建存储过程。 创建存储过程时,需要指定输入参数、...
- 存储过程会输出所输入路径是否存在这一信息。 ### 标签解读:“SQL 备份 存储过程” 这些标签进一步明确了文章的主题,即通过SQL Server的存储过程实现数据库的备份功能。 ### 部分内容解读: 这部分内容提供...
存储过程是一组为了完成特定功能的SQL语句,这些语句被组合在一起并保存在数据库中,用户可以通过调用存储过程的名字来执行这些语句。它们可以有输入参数、输出参数甚至是输入输出参数,使得在不同的场景下灵活地...
存储过程的元数据包括其定义、参数信息、执行情况等,可以通过系统表或函数查询这些信息。 #### 14. 详细信息 存储过程可以包含非常复杂的逻辑,包括变量声明、条件判断、循环控制等。 #### 15. 编写长例程的技巧 ...
2. **执行效率高**:存储过程在首次执行时会被编译和优化,其执行计划存储在系统表中。再次调用时无需重新编译,直接使用存储的执行计划,从而加快了执行速度。 3. **减少网络流量**:调用存储过程仅需发送一次调用...