oracle - password - Error de salida de SQL Fiddle
oracle reset password (2)
En realidad, soy bastante nuevo en PL / SQL
Creé la siguiente tabla usando oracle pl / sql en SQL Fiddle
create table Employee(name varchar2(100),id integer, salary integer,PRIMARY KEY(id));
insert into Employee(name,id,salary) values(''sa'',94,100);
insert into Employee(name,id,salary) values(''pr'',88,150);
insert into Employee(name,id,salary) values(''ji'',33,900);
insert into Employee(name,id,salary) values(''na'',24,880);
insert into Employee(name,id,salary) values(''po'',65,770);
insert into Employee(name,id,salary) values(''ri'',69,910);
insert into Employee(name,id,salary) values(''uj'',12,650);
insert into Employee(name,id,salary) values(''ad'',43,440);
insert into Employee(name,id,salary) values(''sam'',40,550);
Ejecuté la siguiente consulta
DECLARE
employee_record Employee%ROWTYPE;
BEGIN
select * into employee_record from Employee where id>90;
dbms_output.put_line(employee_record.name||'' ''||employee_record.id||'' ''||employee_record.salary);
END;
/
Estoy obteniendo la siguiente salida
Record Count: 0; Execution Time: 2ms
Debería imprimir los valores presentes en el registro del empleado, ¿verdad? ¿Hay algo mal en mi consulta sql o algún problema con sql fiddle no puede mostrar dbms_output?
Necesitas emular dbms_output.put_line
:)
Esquema:
create table Employee(
name varchar2(100),
id integer,
salary integer,
PRIMARY KEY(id)
);
insert into Employee(name,id,salary) values(''sa'',94,100);
insert into Employee(name,id,salary) values(''pr'',88,150);
insert into Employee(name,id,salary) values(''ji'',33,900);
insert into Employee(name,id,salary) values(''na'',24,880);
insert into Employee(name,id,salary) values(''po'',65,770);
insert into Employee(name,id,salary) values(''ri'',69,910);
insert into Employee(name,id,salary) values(''uj'',12,650);
insert into Employee(name,id,salary) values(''ad'',43,440);
insert into Employee(name,id,salary) values(''sam'',40,550);
create table dbmsoutput (
pos int,
mes varchar2(4000)
);
SQL:
DECLARE
employee_record Employee%ROWTYPE;
procedure put_line(p_mes in varchar2) is
v_pos int;
begin
select count(0) into v_pos from dbmsoutput;
insert into dbmsoutput (pos, mes) values (v_pos, p_mes);
end;
BEGIN
put_line(''Hello! This code is powered by dbms_output emulator :)'');
-- Your code here:
select * into employee_record from Employee where id>90;
put_line(employee_record.name||'' ''||employee_record.id||'' ''||employee_record.salary);
--
put_line(''Bye!'');
END;
/
SELECT mes FROM dbmsoutput order by pos
Solo como curiosidad, puede obtener resultados dbms_output
limitados de SQL Fiddle, pero necesita una función para extraer las líneas almacenadas y devolverlas en un formulario que puede seleccionar. Esto usa una tabla canalizada:
create type t_lines as table of varchar2(4000)
/
create or replace function get_lines
return t_lines pipelined is
lines dbms_output.chararr;
numlines integer;
begin
numlines := 999;
dbms_output.get_lines(lines, numlines);
if numlines > 0 then
for i in 1..numlines loop
pipe row (lines(i));
end loop;
else
pipe row (''No data'');
end if;
end;
/
Y luego, después de lo que sea que haya emitido llamadas dbms_output.put_line
:
select * from table(get_lines);
Demo Y consulte la documentación dbms_output
para ver qué hace su procedimiento get_lines
y cómo se relaciona con sus llamadas put_lines
.
Pero solo porque puedes hacer algo, no significa que necesariamente deberías hacerlo . Esto es incómodo y no escala, pero tampoco lo hace tratando de aprender PL / SQL a través de SQL Fiddle realmente.
Me gustaría secundar la recomendación de Ben de obtener tu propia base de datos para jugar, pero te sugiero que mires una imagen VM pregenerada que puedes ejecutar en VirtualBox, lo que te ahorra mucho tiempo en la configuración: no lo haces tiene que preocuparse acerca de cómo instalar el software de Oracle o crear y configurar una base de datos, solo está listo para usar, y puede tirarlo o comenzar fácilmente de nuevo si las cosas van mal.