I've been creating a tool for unit tests called: Unit Test Tool for PL/SQL.
Please find it on the link below with installing manual:
http://utt-plsql.blogspot.com
Enjoy it!!
create table users (id number, name varchar2(40));
alter table users add constraint pk_users primary key (id);
create table permissions (id number, descr varchar2(40));
alter table permissions add constraint pk_permissions primary key (id);
create table user_permissions (id number, user_id number, id_permission number);
alter table user_permissions add constraint pk_user_permissions primary key (id);
alter table user_permissions add constraint fk_user_permissions_user foreign key (user_id) references users(id);
alter table user_permissions add constraint fk_user_permissions_perm foreign key (id_permission) references permissions(id);
insert into users (id, name) values (1,'Marcelo');
insert into users (id, name) values (2,'Seth');
insert into permissions (id,descr) values (1, 'Developer');
insert into permissions (id,descr) values (2, 'Analyst');
insert into permissions (id,descr) values (3, 'Tester');
insert into permissions (id,descr) values (4, 'Manager');
insert into user_permissions (id, user_id, id_permission) values (1,1,1);
insert into user_permissions (id, user_id, id_permission) values (2,1,2);
insert into user_permissions (id, user_id, id_permission) values (3,2,4);
insert into user_permissions (id, user_id, id_permission) values (4,2,2);
insert into user_permissions (id, user_id, id_permission) values (5,2,1);
create or replace package examples is
-- Author : Marcelo Cure
-- Created : 25/10/2012 11:30:49
--declare a simple record
type r_permissions is record (id number,
descr varchar2(40));
--declare a table of the record type just declared above type tb_permissions is table of r_permissions;
function get_user_permissions (p_user_id in number) return tb_permissions
pipelined;
end examples;
/
create or replace package body examples is
--returns a table of a specific record + pipelined option
function get_user_permissions (p_user_id in number) return tb_permissions pipelined is
--get user permissions
cursor c_permissions is
select b.id, b.descr
from user_permissions a,
permissions b
where a.user_id = p_user_id
and a.id_permission = b.id;
--declare the pipelined table
v_tb_users r_permissions;
v_id number;
v_descr varchar2(40);
begin
open c_permissions;
loop
fetch c_permissions into v_id, v_descr;
exit when c_permissions%notfound;
v_tb_users.id := v_id;
v_tb_users.descr := v_descr;
--inserts a row into the pipelined table
pipe row (v_tb_users);
end loop;
end get_user_permissions;
end examples;
/
select *
from table(examples.get_user_permissions(1));--passing user_id 1 as parameter
create or replace directory my_dir
as 'C:\oraclexe\app\oracle\product\10.2.0\server\cure';
declare
myfile utl_file.file_type;
begin
myfile := utl_file.fopen('my_dir','teste.txt','W',32000); --este último parâmetro seta o tamanho da linha
utl_file.put_line(myfile,'conteúdo linha 1',true);
utl_file.put_line(myfile,'conteúdo linha 2',true);
utl_file.fclose(myfile);
end;
declare
myfile utl_file.file_type;
conteudo varchar2(32000);
conteudo_aux varchar2(32000);
begin
myfile := utl_file.fopen('my_dir', 'teste.txt', 'R', 32000);
loop
begin
utl_file.get_line(myfile, conteudo_aux, 32000);
exception
when no_data_found then
exit;
end;
conteudo := conteudo||conteudo_aux||chr(10);
end loop;
dbms_output.put_line(conteudo);
utl_file.fclose(myfile);
end;
begin
utl_file.frename(src_location => 'my_dir',
src_filename => 'teste.txt',
dest_location => 'my_dir',
dest_filename => 'teste_renamed.txt',
overwrite => true);
end;
begin
utl_file.fremove('my_dir','teste.txt');
end;
begin
utl_file.fcopy(src_location => 'my_dir',
src_filename => 'teste_renamed.txt',
dest_location => 'my_dir',
dest_filename => 'new_file.txt',
start_line => 1,
end_line => 12);
end;
file => myfile,
absolute_offset => posição a ser procurada,
relative_offset => o número de bytes(posições) que deve ser procurado para frente ou para trás, considerando que: se o número for positivo procura pra frente, se for negativo, procura pra trás)
...
utl_file.fseek(myfile,
10,
-12);
...
select dbms_random.value(1,10)
from dual;
declare
str_1 varchar2(20);
begin
str_1 := dbms_random.string('A', 20);
dbms_output.put_line('str_1: '||str_1);
end;
SELECT dbms_random.normal
FROM dual;
select object_name
from (select object_name
from sys.all_objects
order by dbms_random.value)
where rownum = 1;
exec dbms_random.seed(681457802);
declare
ret pls_integer;
init number(30);
BEGIN
init := to_char(sys_extract_utc(current_timestamp), 'hh24miss');
dbms_random.initialize(init);
for i in 1..10 loop
ret := dbms_random.random;
dbms_output.put_line(ret);
init := ret;
end loop;
dbms_random.terminate;
end;