oracle 无效标识符,Oracle函数中的标识符无效

本文探讨了一段复杂的SQL查询代码,该代码涉及多个表的连接,并使用了自定义的Oracle函数来处理业务逻辑。作者在尝试执行此查询时遇到了与OracleDataReader相关的问题。文章详细介绍了SQL查询的内容及遇到的具体错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是我的SQL;

select a.hesap_no,

a.teklif_no1 || '/' || a.teklif_no2 as teklif,

a.mus_k_isim as musteri,

b.marka,

c.sasi_no,

c.sasi_durum,

d.tas_mar,

nvl(risk_sasi(a.teklif_no1, a.teklif_no2, c.urun_sira_no, c.sira_no), 0) as risk,

nvl(mv_sasi(a.teklif_no1, a.teklif_no2, c.sira_no, c.urun_sira_no, sysdate), 0) as mv

from s_teklif a,

s_urun b,

s_urun_detay c,

koc_ktmar_pr d

where a.teklif_no1 || a.teklif_no2 = b.teklif_no1 || b.teklif_no2这是我的MV_SASI函数;

create or replace

FUNCTION MV_SASI

(

TEK1 IN VARCHAR2,

TEK2 IN NUMBER,

SIRA IN NUMBER,

USIRA IN NUMBER,

DT IN DATE

)

RETURN NUMBER IS MV number;

fat number;

adet number;

pd number;

pds number;

kt date;

ktv number;

dtv number;

frk number;

yfrk number;

TKM VARCHAR2(10);

BEGIN

SELECT COUNT(*)

INTO adet

FROM S_URUN_DETAY

WHERE (SASI_DURUM IS NULL OR SASI_DURUM IN ('A','R'))

AND TEKLIF_NO1 = TEK1

AND TEKLIF_NO2 = TEK2;

SELECT SUM(CASE WHEN B.SASI_DURUM IS NULL OR B.SASI_DURUM IN ('A','R') THEN A.KDV_FIYAT ELSE 0 END)

INTO fat

FROM S_URUN A,S_URUN_DETAY B

WHERE A.TEKLIF_NO1 = tek1

AND A.TEKLIF_NO2 = tek2

AND A.TEKLIF_NO1 = B.TEKLIF_NO1

AND A.TEKLIF_NO2 = B.TEKLIF_NO2

AND A.SIRA_NO = B.URUN_SIRA_NO;

SELECT KULLAN_TARIH

INTO kt

FROM S_TEKLIF

WHERE TEKLIF_NO1 = tek1

AND TEKLIF_NO2 = tek2 ;

yfrk:= EXTRACT(YEAR FROM dt) - EXTRACT(YEAR FROM kt);

ktv := EXTRACT(MONTH FROM kt);

dtv := EXTRACT(MONTH FROM dt);

frk := yfrk * 12 + (dtv-ktv);

IF frk <= 0 THEN

pd := fat * 0.85;

ELSE

pd := fat*0.85 - (fat * 0.0101 * frk);

END IF;

SELECT NVL(ROUND((CASE WHEN SASI_DURUM IS NULL OR SASI_DURUM IN ('A','R') THEN pd / adet ELSE 0 END),2),0)

INTO pds

FROM S_URUN_DETAY

WHERE TEKLIF_NO1 = TEK1

AND TEKLIF_NO2 = TEK2

AND URUN_SIRA_NO = USIRA

AND SIRA_NO = SIRA;

RETURN pds;

END;但在我的页面,我得到这行代码的错误;

OracleDataReader dr = myCommand.ExecuteReader(System.Data.CommandBehavior.CloseConnection);

OvWu3.png

我在哪里做错了?

最好的问候,Soner

myCommand是;

select a.hesap_no,

a.teklif_no1 || '/' || a.teklif_no2 as teklif,

a.mus_k_isim as musteri,

b.marka,

c.sasi_no,

c.sasi_durum,

d.tas_mar,

nvl(risk_sasi(a.teklif_no1, a.teklif_no2, c.urun_sira_no, c.sira_no), 0) as risk,

nvl(mv_sasi(a.teklif_no1, a.teklif_no2, c.sira_no, c.urun_sira_no, sysdate), 0) as mv

from s_teklif a,

s_urun b,

s_urun_detay c,

koc_ktmar_pr d

where a.teklif_no1 || a.teklif_no2 = b.teklif_no1 || b.teklif_no2

and a.teklif_no1 || a.teklif_no2 = c.teklif_no1 || c.teklif_no2

and b.sira_no = c.urun_sira_no

and b.distributor = d.dist_kod

and b.marka = d.marka_kod

and b.urun_kod = d.tas_kod

and a.hesap_no in (select a.hesap_no

from s_teklif a

where a.mus_k_isim in (system.collections.arraylist)

)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值