这辈子写的第一个PL/SQL过程

王朝mssql·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

这辈子写的第一个PL/SQL过程,发现PL/SQL入门也是很简单的。

只有短短的几行,功能更是差多了:查询当前数据库实例名称。

create or replace procedure dbname is

v_dbname varchar2(30);

begin

select name into v_dbname from v$database;

dbms_output.put_line('db name is: 'v_dbname);

end;

相关说明:

1.必须由dba执行,否则出错。

2.执行前须 set serveroutput on

3.依此方式执行:

exec dbname

附录:同事写的一个PL/SQL,可以试一下。注重:不要用sys用户执行。

create or replace procedure test is

v_tname tab.tname%type;

v_count number;

cursor tab_cursor is

select tname from tab;

begin

open tab_cursor;

loop

fetch tab_cursor into v_tname;

execute immediate 'select count(*) from 'v_tname into v_count ;

dbms_output.put_line(v_tname' 'to_char(v_count));

exit when tab_cursor%notfound;

end loop;

close tab_cursor;

end;

执行方法:

set serveroutput on

exec test

我的那份在这儿,可是却不能执行。

create or replace procedure tabcount is

v_tname varchar2(30);

v_count number;

v_size number;

begin

select count(*) into v_size from tab;

loop

select tname into v_tname from tab where rownum=v_size;

execute immediate 'select count(*) from 'v_tname into v_count;

dbms_output.put_line(v_tname' 'to_char(v_count));

v_size:=v_size-1;

exit when v_size=0;

end loop;

end;

ERROR at line 1:

ORA-01403: no data found

ORA-06512: at "SCOTT.TABCOUNT", line 8

ORA-06512: at line 1

=========

added by 20050804.

今天学了游标,偶终于也写了一个不会出错的了。

create or replace procedure tabcount is

v_tname varchar2(30);

cursor sor is select tname from tab;

v_count number;

begin

open sor;

dbms_output.enable(200000);

v_count:=0;

loop

fetch sor into v_tname;

dbms_output.put_line('tname is 'v_tname);

v_count:=v_count+1;

exit when sor%NOTFOUND;

end loop;

dbms_output.put_line('counts of tname is 'to_char(v_count));

close sor;

end;

嘿嘿,太好了。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航