2017-08-14 95 views
-2

我想通过这个plsql代码显示表信息,但是当它执行过程时,它只显示过程成功。不是output.please的帮助。通过plsql过程显示表数据

CREATE OR REPLACE PROCEDURE CarInfo 
AS 

V_serial    CAR.serial%TYPE; 
V_Cid     CAR.cid%TYPE; 
V_make     CAR.make%TYPE ; 
V_model     CAR.model%TYPE; 
V_cyear     CAR.cyear%TYPE; 
V_color     CAR.color%TYPE; 
V_trim     CAR.trim%TYPE; 
V_enginetype   CAR.enginetype%TYPE; 
V_purchinv    CAR.purchinv%TYPE; 
V_purchdate    CAR.purchdate%TYPE; 
V_purchfrom    CAR.purchfrom%TYPE; 
V_purchcost    CAR.purchcost%TYPE; 
V_freightcost   CAR.freightcost%TYPE; 
V_totalcost    CAR.totalcost%TYPE; 
V_listprice    CAR.listprice%TYPE; 

BEGIN 
SELECT serial, cid, make, model, cyear, color, trim, enginetype, purchinv, purchdate, purchfrom , purchcost, freightcost, 
     totalcost, listprice 
    INTO V_serial, V_cid, V_make, V_model, V_cyear, V_color, V_trim, V_enginetype, V_purchinv, V_purchdate, V_purchfrom , V_purchcost, V_freightcost, 
     V_totalcost, V_listprice 
    FROM CAR 
    where cid is null; 

Exception 
WHEN NO_DATA_FOUND THEN 
    dbms_output.put_line('No Data Found') ; 

DBMS_OUTPUT.PUT_LINE(V_serial||' ' || V_cid||' ' ||V_make||' ' ||V_model||' ' ||V_cyear||' ' ||V_color||' ' ||V_trim||' ' ||V_enginetype||' ' ||V_purchinv||' ' ||V_purchdate||' ' ||V_purchfrom ||' ' ||V_purchcost||' ' ||V_freightcost||' ' || 
     V_totalcost||' ' ||V_listprice); 
END; 
+0

你DBMS_OUTPUT语句是你的异常中之前被写入。所以除非有例外,否则绝不会打印....同样,根据您使用的工具,您通常必须为每个连接启用DBMS_OUTPUT。例如在SQLDeveloper中,您需要通过查看菜单/ DMBS_OUTPUT /点击绿色加选择连接。 –

+0

首先,移动'DBMS_OUTPUT.PUT_LINE(V_serial ...)在EXCEPTION块之上,以便它不在其中;其次,在运行此过程之前,在sqlplus中执行'set serveroutput on;' – g00dy

+0

此外,为什么使用如果只有一个变量,那么有许多变量?在select语句的最后一个dbms_output中使用所有的连接,然后选择SELECT到一个变量中,而“dbms_output”只有这一个变量。 – g00dy

回答

0

总之,我会写你的程序的方式如下:

CREATE OR REPLACE PROCEDURE CarInfo 
AS 
l_result_clob clob; 

BEGIN 
    SELECT serial ||' ' || cid  ||' ' ||make  ||' ' ||model  ||' ' ||cyear||' ' || 
     color ||' ' ||trim  ||' ' ||enginetype||' ' ||purchinv ||' ' || 
     purchdate||' ' ||purchfrom ||' ' ||purchcost ||' ' ||freightcost||' ' ||totalcost||' ' ||listprice 
    INTO l_result_clob 
    FROM CAR 
    where cid is null; 

    DBMS_OUTPUT.PUT_LINE(l_result_clob); 

Exception 
WHEN NO_DATA_FOUND THEN 
    dbms_output.put_line('No Data Found') ; 
WHEN OTHERS THEN 
    dbms_output.put_line('SQLCODE: ' || SQLCODE) ; 

END CarInfo; 

那是当然的,如果在SELECT语句中的所有列实际上是转换为字符/ CLOB,如Oracle会隐式转换它们,以便进行连接。

干杯

0

这应该您的异常块

DBMS_OUTPUT.PUT_LINE(V_serial||' ' || V_cid||' ' ||V_make||' ' ||V_model||' ' ||V_cyear||' ' ||V_color||' ' ||V_trim||' ' ||V_enginetype||' ' ||V_purchinv||' ' ||V_purchdate||' ' ||V_purchfrom ||' ' ||V_purchcost||' ' ||V_freightcost||' ' || V_totalcost||' ' ||V_listprice);