use*_*404 5 oracle plsql sqlfiddle
实际上我是PL/SQL的新手
我在SQL Fiddle中使用oracle pl/sql创建了下表
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);
Run Code Online (Sandbox Code Playgroud)
我执行了以下查询
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;
/
Run Code Online (Sandbox Code Playgroud)
我得到以下输出
Record Count: 0; Execution Time: 2ms
Run Code Online (Sandbox Code Playgroud)
它应该打印员工记录中的值,对吧?我的SQL查询中有什么问题或sql小提琴无法显示dbms_output的一些问题?
Ego*_*off 12
你需要模仿dbms_output.put_line
:)
架构:
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)
);
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
正如好奇心一样,您可以dbms_output
从SQL Fiddle 获得有限的结果,但是您需要一个函数来提取缓冲的行并以您可以选择的形式返回它们.这使用了一个流水线表:
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;
/
Run Code Online (Sandbox Code Playgroud)
然后,在你发出任何dbms_output.put_line
电话之后:
select * from table(get_lines);
Run Code Online (Sandbox Code Playgroud)
演示.并查看dbms_output
文档以了解其get_lines
过程的作用以及它与您的put_lines
呼叫的关系.
但仅仅因为你可以做某事,并不意味着你一定应该做.这很尴尬,不能扩展,但也没有尝试通过SQL Fiddle学习PL/SQL.
我第二次推荐使用自己的数据库,但我建议你看一下你可以在VirtualBox中运行的预先构建的虚拟机映像,这可以节省你在设置中的大量时间 - 你不需要不得不担心如何安装Oracle软件或创建和配置数据库,它只是随时可以使用,如果出现问题,您可以将其丢弃或轻松重新启动.
归档时间: |
|
查看次数: |
2666 次 |
最近记录: |