这辈子写的第一个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;
嘿嘿,太好了。
|