2013-10-02 11 views
5

Eigentlich bin ich ganz neu in PL/SQLSQL Fiddle Output Error

ich die folgende Tabelle mit Oracle PL/SQL in SQL Fiddle

erstellt
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); 

ich ausgeführt, um die folgende Abfrage

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; 
/

Ich erhalte folgende Ausgabe

Record Count: 0; Execution Time: 2ms 

Es sollte die Werte in der Mitarbeiterakte drucken, oder? Ist etwas falsch in meiner SQL-Abfrage oder ein Problem mit SQL Fiddle nicht in der Lage, dbms_output anzuzeigen?

+6

Nein, SQL Fiddle nicht drucken alles da es wurde nicht so codiert. Wenn Sie Oracle herunterladen (es gibt eine kostenlose Version) und einen anderen Client verwenden, um es auszudrucken, erhalten Sie eine Ausgabe. – Ben

+0

Vielen Dank. Kann ich meine Antwort in Sql Giddle bestätigen? – user2133404

+0

Eigentlich haben Sie keine Abfrage ausgeführt, sondern einen PL/SQL-Codeblock :) Um Ihre Frage zu beantworten, sollten Sie nur Ihre Abfrage ausführen, um die Ergebnisse zu erhalten: SELECT * FROM Employee WHERE id> 90; überprüfe das: http://sqlfiddle.com/#!4/7417b5/7 –

Antwort

12

Sie benötigen dbms_output.put_line :)

Schema zu emulieren:

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 

fiddle

5

Genau wie eine Kuriosität wirklich, Sie können erhalten begrenzt dbms_output Ergebnisse von SQL Fiddle, aber Sie müssen eine Funktion, um die gepufferte Linien extrahieren und sie in einer Form zurückkehren Sie auswählen können. Dieser verwendet eine Pipeline-Tabelle:

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; 
/

Und dann, nach was auch immer Sie haben die Ausgabe dbms_output.put_line Anrufe:

select * from table(get_lines); 

Demo. Und sehen Sie die dbms_output documentation, um zu sehen, was sein get_lines Verfahren tut und wie es sich auf Ihre put_lines Anrufe bezieht.

Aber nur weil Sie können etwas tun, bedeutet nicht, dass Sie unbedingt sollten. Das ist peinlich und skaliert nicht, aber auch nicht, PL/SQL durch SQL Fiddle wirklich zu lernen.

Ich würde Bens Empfehlung ablehnen, um Ihre eigene Datenbank zu bekommen, aber ich schlage vor, Sie schauen auf eine pre-built VM image können Sie in VirtualBox ausführen, die Sie viel Zeit in der Einrichtung spart - Sie nicht Sie müssen sich Gedanken darüber machen, wie Sie die Oracle-Software installieren oder eine Datenbank erstellen und konfigurieren. Sie ist einfach zu verwenden und Sie können sie einfach wegwerfen oder einfach neu starten, wenn etwas schief geht.