我正在研究一個應該從全名回傳名字和姓氏的函式,就像這樣:
create or replace package body pkg_format_eagle_data as
function parse_firstname(p_fullname supplier.contactname%type) return varchar2 is
v_firstname supplier.contactname%type;
begin
v_firstname := substr(p_fullname,1,instr(p_fullname,' ',1,1)-1);
return v_firstname;
end PARSE_FIRSTNAME;
function PARSE_LASTNAME(p_fullname supplier.contactname%type) return varchar2 is
v_lastname supplier.contactname%type;
begin
v_lastname := substr(p_fullname,instr(p_fullname,' ',1,1) 1,length(p_fullname) - instr(p_fullname,' ',1,1));
return v_lastname;
end PARSE_LASTNAME;
end pkg_format_eagle_data;
它編譯成功,但是當我在下面的塊中呼叫它時,它什么也不回傳。在這個塊中,我創建了一個名為 fullName 的變數來存盤游標,并回圈遍歷游標。
declare
fullName supplier.contactname%type;
cursor list_supplier is
select contactname
from supplier;
begin
open list_supplier;
loop
fetch list_supplier into fullName;
dbms_output.put(pkg_format_eagle_data.PARSE_FIRSTNAME(fullName));
dbms_output.put_line(pkg_format_eagle_data.PARSE_LASTNAME(fullName));
exit when list_supplier%notfound;
end loop;
close list_supplier;
end;
我已經嘗試過 SELECT 中的函式條件并且它們起作用了。請問我在哪里做錯了?這是一個示例表:
create table supplier
(
contactname varchar2(50);
);
INSERT INTO supplier (contactname)
VALUES ('Alice Bob');
INSERT INTO supplier (contactname)
VALUES ('Tim Tom');
INSERT INTO supplier (contactname)
VALUES ('Sam Bob');
uj5u.com熱心網友回復:
我已經在 Oracle DB 中驗證了您的代碼,其輸出如下所示。
AliceBob
TimTom
SamBob
SamBob
正如預期的那樣,除了重復的行是由于 fetch 陳述句的放置引起的exit,它應該在 fetch 陳述句之后立即出現。
我能想到的唯一原因是您set serveroutput on在使用的任何其他工具中缺少它的 SQL* Plus 或等效工具。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/523920.html
標籤:sql甲骨文
