在Oracle的insert语句中使用函数
我有一个这样的功能:在Oracle的insert语句中使用函数,oracle,function,sql-insert,Oracle,Function,Sql Insert,我有一个这样的功能: FUNCTION mfi_cust_details (vacid VARCHAR2) RETURN VARCHAR2 IS vcustdetails VARCHAR2 (300); BEGIN BEGIN SELECT a.cust_title_code || ',' || a.cust_id || '
FUNCTION mfi_cust_details (vacid VARCHAR2)
RETURN VARCHAR2
IS
vcustdetails VARCHAR2 (300);
BEGIN
BEGIN
SELECT a.cust_title_code
|| ','
|| a.cust_id
|| ','
|| b.address_line1
|| ','
|| b.address_line2
|| ','
|| mfi_citycountry (b.country, b.city)
|| ','
|| b.zip
INTO vcustdetails
FROM tbaadm.cmg a, crmuser.address b
WHERE TRIM (a.cif_id) = TRIM (b.orgkey)
AND UPPER (b.addresscategory) IN ('MAILING', 'REGISTERED')
AND cust_id IN (SELECT cust_id
FROM tbaadm.gam
WHERE acid = vacid);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
vcustdetails :=
NULL
|| ','
|| NULL
|| ','
|| NULL
|| ','
|| NULL
|| ','
|| NULL
|| ','
|| NULL
|| ','
|| NULL;
END;
RETURN vcustdetails;
END mfi_cust_details;
我需要将这些数据插入表中,例如:
insert into my_table values(mfi_cust_details(myacid),anotherFunction());
但我的过程甚至没有编译错误:
not enough values
我想做的一切都有可能吗
编辑
我的表格定义
create table my_table cust_title_code varchar2(10),
cust_id varchar2(10),
address1 varchar2(10),
address_2 varchar2(10),
city_code varchar2(5),
country_code varchar2(5),
zip_code varchar2(10));
您的函数被定义为返回一列,即字符串“value,value,value”等(或“Null,Null,Null”等)[尽管我看不出在出错时将所有Null值插入我的_表中有什么用处!]。插入失败是因为插入到表中(没有指定的列列表)将默认按表中定义的顺序插入所有列,但由于函数返回一列,因此插入失败并显示“值不足” 似乎您正试图在insert语句中手工创建多个列—我不确定是否有办法做到这一点 您可以将函数定义为返回行类型的函数,该行类型基本上表示该表中的一条记录:
FUNCTION mfi_cust_details(vacid VARCHAR2) return my_table%ROWTYPE as
my_table%ROWTYPE vcustdetails;
BEGIN
SELECT a.cust_title_code,
a.cust_id,
b.address_line1,
b.address_line2,
mfi_citycountry (b.country, b.city),
b.zip
INTO vcustdetails
FROM tbaadm.cmg a, crmuser.address b
WHERE TRIM (a.cif_id) = TRIM (b.orgkey)
AND UPPER (b.addresscategory) IN ('MAILING', 'REGISTERED')
AND cust_id IN (SELECT cust_id
FROM tbaadm.gam
WHERE acid = vacid);
RETURN vcustdetails;
END;
但是,您需要在PL/SQL块(即BEGIN/END)中执行实际的insert语句
您需要插入到..SELECT语句中。MY_表中有多少列?如果不是2(由values语句定义),则不会work@davegreen100我在游标内使用insert和其他值。在将
insert插入(col1,col2)值(val1.val2)之前,请指定列
发布MY_table的表定义如果我有其他不是来自函数的值,这是否有效?该表的列数多于一个函数返回的列数。我还有另外两个函数要插入到同一个表中。是的,但是您需要声明单独的变量并分别调用您的函数。然后您可以将这些变量添加到插入列表中。或者,如果函数返回一列,您可以直接内联它。。。。(..,zip,另一个函数());
declare
my_table%ROWTYPE rec;
begin
rec := mfi_cust_details('id');
insert into my_table( cust_title_code, cust_id, address1, address_2, city_code, country_code, zip_code)
values ( rec.cust_title_code, rec.cust_id, rec.address1, rec.address_2, rec.city_code, rec.country_code, rec.zip_code );
-- don't forget to commit;
end;