Home » SQL & PL/SQL » SQL & PL/SQL » PL SQL Code with variable (Oracle 10 G)
PL SQL Code with variable [message #645920] Wed, 16 December 2015 06:52 Go to next message
mashrima
Messages: 5
Registered: December 2015
Location: Bangalore
Junior Member
Hi Team,

Hope you all doing good !!

here i am trying to execute the code with variable but getting an error. can some one let me know where is the mistake happening.
my doubt is how can i assign the variable in below AND condition with like operator. remember that variable values can be anywhere in that AND column so i need to take like operator.

------------------



DECLARE
V_DATE varchar2(255):= SELECT to_char(sysdate-1, 'DDMONYY') FROM dual
BEGIN
SELECT DISTINCT
ABA.CREATION_DATE "BATCH CREATION DATE",
HOU.NAME "OPERTAING_UNIT",
PV.VENDOR_NAME SUPPLIER,
AIA.INVOICE_NUM "INVOICE NUM",
AIA.ATTRIBUTE3,
PVS.VENDOR_SITE_CODE SITE,
AIA.INVOICE_AMOUNT "INVOICE AMOUNT",
AIA.INVOICE_DATE "INVOICE DATE",
AIA.INVOICE_TYPE_LOOKUP_CODE "TYPE",
PV.SEGMENT1 "SUPPLIER NUM",
ABA.BATCH_NAME "Batch Name",
AIA.INVOICE_CURRENCY_CODE "INVOICE CURRENCY",
APT.DESCRIPTION TERMS,
PHA.SEGMENT1 "PO NUMBER",
AIA.DESCRIPTION,
AIA.PAYMENT_METHOD_CODE,
AIA.REQUESTER_ID,
AIA.TOTAL_TAX_AMOUNT,
AIA.PAYMENT_CURRENCY_CODE "PAYMENT CURRENCY",
AIA.PAY_GROUP_LOOKUP_CODE "PAY GROUP",
AIA.TERMS_DATE,
AIA.GL_DATE,
(SELECT (0 - SUM(NVL(AMOUNT,0)))
FROM AP_INVOICE_DISTRIBUTIONS_ALL
WHERE INVOICE_ID = AIA.INVOICE_ID
AND LINE_TYPE_LOOKUP_CODE = 'AWT')"WITHHELD AMOUNT",
(SELECT (0 - SUM(NVL(AMOUNT,0)))
FROM APPS.AP_INVOICE_DISTRIBUTIONS_ALL
WHERE INVOICE_ID = AIA.INVOICE_ID
AND (LINE_TYPE_LOOKUP_CODE = 'PREPAY'
OR LINE_TYPE_LOOKUP_CODE = 'TAX'
AND PREPAY_TAX_PARENT_ID IS NOT NULL)) "PREPAID AMOUNT",
AIA.PAYMENT_CROSS_RATE_DATE "PAYMENT RATE DATE",
AIA.PAYMENT_CROSS_RATE_TYPE "PAYMENT RATE TYPE",
AIA.PAYMENT_CROSS_RATE "PAYMENT RATE",
AIA.EXCHANGE_RATE_TYPE "RATE TYPE",
AIA.EXCHANGE_DATE "EXCHANGE DATE",
AIA.EXCHANGE_RATE "EXCHANGE RATE",
DECODE(AIA.INVOICE_TYPE_LOOKUP_CODE, 'PREPAYMENT', DECODE(AIA.EARLIEST_SETTLEMENT_DATE, '','PERMANENT', 'TEMPORARY')) "PREPAYMENT_TYPE",
AIA.EARLIEST_SETTLEMENT_DATE "SETTLEMENT DATE",
AIA.APPROVAL_READY_FLAG,
PAPF1.FULL_NAME||'.....'||PAPF2.FULL_NAME||'.....'||AIA.ATTRIBUTE4||'.....'||PAPF2.EMAIL_ADDRESS "[ ]"
FROM
APPS.AP_TERMS APT,
APPS.XXCFI_PER_ALL_PEOPLE_F_VW PAPF2,
APPS.XXCFI_PER_ALL_PEOPLE_F_VW PAPF1,
APPS.AP_SUPPLIER_SITES_ALL PVS,
APPS.AP_SUPPLIERS PV,
APPS.AP_INVOICE_DISTRIBUTIONS_ALL AIDA,
APPS.AP_INVOICES_ALL AIA,
APPS.PO_DISTRIBUTIONS_ALL PDA,
APPS.PO_HEADERS_ALL PHA,
APPS.AP_BATCHES_ALL ABA ,
APPS.HR_OPERATING_UNITS HOU
WHERE APT.TERM_ID =AIA.TERMS_ID
AND PV.VENDOR_ID =AIA.VENDOR_ID
AND PVS.VENDOR_SITE_ID =AIA.VENDOR_SITE_ID
AND PAPF1.PERSON_ID(+) =AIA.REQUESTER_ID
AND PAPF1.EFFECTIVE_END_DATE(+) > TRUNC(SYSDATE)
AND PAPF2.PERSON_ID(+) =AIA.ATTRIBUTE8
AND PAPF2.EFFECTIVE_END_DATE(+) > TRUNC(SYSDATE)
AND AIA.BATCH_ID=ABA.BATCH_ID
AND AIDA.INVOICE_ID(+)=AIA.INVOICE_ID
AND AIDA.PO_DISTRIBUTION_ID=PDA.PO_DISTRIBUTION_ID(+)
AND PDA.PO_HEADER_ID=PHA.PO_HEADER_ID(+)
AND HOU.ORGANIZATION_ID = AIA.ORG_ID
AND ABA.BATCH_NAME LIKE '%V_DATE%'

ORDER BY HOU.NAME,ABA.BATCH_NAME
END

[Updated on: Wed, 16 December 2015 06:55]

Report message to a moderator

Re: PL SQL Code with variable [message #645921 is a reply to message #645920] Wed, 16 December 2015 07:26 Go to previous messageGo to next message
flyboy
Messages: 1903
Registered: November 2006
Senior Member
Hi,

Firstly, why are you trying query DUAL instead of simple assignment statement?
declare
  V_DATE varchar2(255):= to_char(sysdate-1, 'DDMONYY');
begin null; end;
/

Secondly, in PL/SQL, the query result has to be put somewhere (INTO clause of SELECT statement), otherwise the code will fail.

Is the result of the query inside that anonymous PL/SQL block supposed to be processed anyhow? If yes, how and where?
Because now (if succeeded) the result set would be just thrown away.

[Edit: added the last sentence]

[Updated on: Wed, 16 December 2015 07:28]

Report message to a moderator

Re: PL SQL Code with variable [message #645923 is a reply to message #645921] Wed, 16 December 2015 07:57 Go to previous messageGo to next message
mashrima
Messages: 5
Registered: December 2015
Location: Bangalore
Junior Member
Hi ,

thanks for the reply and valuable suggestion.
how can i pass the value of variable in below AND condition with LIKE operator.
I do not have access other than SELECT so creating any object to hold the select values not possible.
you can suggest me any other method too

Thanks a ton!!
Re: PL SQL Code with variable [message #645924 is a reply to message #645920] Wed, 16 December 2015 08:05 Go to previous messageGo to next message
Michel Cadot
Messages: 68776
Registered: March 2007
Location: Saint-Maur, France, https...
Senior Member
Account Moderator

Welcome to the forum;

Please read OraFAQ Forum Guide and How to use [code] tags and make your code easier to read.
Also always post your Oracle version, with 4 decimals.

Format your query.
If you don't know how to do it, learn it using SQL Formatter.

Quote:
i am trying to execute the code with variable but getting an error.


There is no error message in your post.
Use SQL*Plus and copy and paste your session, the WHOLE session.


Re: PL SQL Code with variable [message #645925 is a reply to message #645923] Wed, 16 December 2015 08:12 Go to previous messageGo to next message
cookiemonster
Messages: 13975
Registered: September 2008
Location: Rainy Manchester
Senior Member
mashrima wrote on Wed, 16 December 2015 13:57

how can i pass the value of variable in below AND condition with LIKE operator.

By referencing the variable as though it's a variable. You can use concatenation to add the %:
LIKE '%'||V_DATE||'%'


mashrima wrote on Wed, 16 December 2015 13:57

I do not have access other than SELECT so creating any object to hold the select values not possible.
you can suggest me any other method too


Flyboy was talking about PL/SQL variables. If you can write PL/SQL you can create variables.
Where is the result of that query supposed to go? What program are you running it from?
Re: PL SQL Code with variable [message #645927 is a reply to message #645925] Wed, 16 December 2015 08:20 Go to previous messageGo to next message
mashrima
Messages: 5
Registered: December 2015
Location: Bangalore
Junior Member
Hi ,

so now complete program looks like below but getting an error messsage "Error at line 1
ORA-06550: line 73, column 17:
PL/SQL: ORA-00933: SQL command not properly ended
ORA-06550: line 4, column 1:
PL/SQL: SQL Statement ignored
ORA-06550: line 73, column 21:
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:

( begin case declare end exception exit for goto if loop mod
null pragma raise return select update while with
<an identifier> <a double-quote"
----------------------------------------------------------------
DECLARE
V_DATE varchar2(255):= to_char(sysdate-1, 'DDMONYY');
BEGIN
SELECT DISTINCT
ABA.CREATION_DATE "BATCH CREATION DATE",
HOU.NAME "OPERTAING_UNIT",
PV.VENDOR_NAME SUPPLIER,
AIA.INVOICE_NUM "INVOICE NUM",
AIA.ATTRIBUTE3,
PVS.VENDOR_SITE_CODE SITE,
AIA.INVOICE_AMOUNT "INVOICE AMOUNT",
AIA.INVOICE_DATE "INVOICE DATE",
AIA.INVOICE_TYPE_LOOKUP_CODE "TYPE",
PV.SEGMENT1 "SUPPLIER NUM",
ABA.BATCH_NAME "Batch Name",
AIA.INVOICE_CURRENCY_CODE "INVOICE CURRENCY",
APT.DESCRIPTION TERMS,
PHA.SEGMENT1 "PO NUMBER",
AIA.DESCRIPTION,
AIA.PAYMENT_METHOD_CODE,
AIA.REQUESTER_ID,
AIA.TOTAL_TAX_AMOUNT,
AIA.PAYMENT_CURRENCY_CODE "PAYMENT CURRENCY",
AIA.PAY_GROUP_LOOKUP_CODE "PAY GROUP",
AIA.TERMS_DATE,
AIA.GL_DATE,
(SELECT (0 - SUM(NVL(AMOUNT,0)))
FROM AP_INVOICE_DISTRIBUTIONS_ALL
WHERE INVOICE_ID = AIA.INVOICE_ID
AND LINE_TYPE_LOOKUP_CODE = 'AWT')"WITHHELD AMOUNT",
(SELECT (0 - SUM(NVL(AMOUNT,0)))
FROM APPS.AP_INVOICE_DISTRIBUTIONS_ALL
WHERE INVOICE_ID = AIA.INVOICE_ID
AND (LINE_TYPE_LOOKUP_CODE = 'PREPAY'
OR LINE_TYPE_LOOKUP_CODE = 'TAX'
AND PREPAY_TAX_PARENT_ID IS NOT NULL)) "PREPAID AMOUNT",
AIA.PAYMENT_CROSS_RATE_DATE "PAYMENT RATE DATE",
AIA.PAYMENT_CROSS_RATE_TYPE "PAYMENT RATE TYPE",
AIA.PAYMENT_CROSS_RATE "PAYMENT RATE",
AIA.EXCHANGE_RATE_TYPE "RATE TYPE",
AIA.EXCHANGE_DATE "EXCHANGE DATE",
AIA.EXCHANGE_RATE "EXCHANGE RATE",
DECODE(AIA.INVOICE_TYPE_LOOKUP_CODE, 'PREPAYMENT', DECODE(AIA.EARLIEST_SETTLEMENT_DATE, '','PERMANENT', 'TEMPORARY')) "PREPAYMENT_TYPE",
AIA.EARLIEST_SETTLEMENT_DATE "SETTLEMENT DATE",
AIA.APPROVAL_READY_FLAG,
PAPF1.FULL_NAME||'.....'||PAPF2.FULL_NAME||'.....'||AIA.ATTRIBUTE4||'.....'||PAPF2.EMAIL_ADDRESS "[ ]"
FROM
APPS.AP_TERMS APT,
APPS.XXCFI_PER_ALL_PEOPLE_F_VW PAPF2,
APPS.XXCFI_PER_ALL_PEOPLE_F_VW PAPF1,
APPS.AP_SUPPLIER_SITES_ALL PVS,
APPS.AP_SUPPLIERS PV,
APPS.AP_INVOICE_DISTRIBUTIONS_ALL AIDA,
APPS.AP_INVOICES_ALL AIA,
APPS.PO_DISTRIBUTIONS_ALL PDA,
APPS.PO_HEADERS_ALL PHA,
APPS.AP_BATCHES_ALL ABA ,
APPS.HR_OPERATING_UNITS HOU
WHERE APT.TERM_ID =AIA.TERMS_ID
AND PV.VENDOR_ID =AIA.VENDOR_ID
AND PVS.VENDOR_SITE_ID =AIA.VENDOR_SITE_ID
AND PAPF1.PERSON_ID(+) =AIA.REQUESTER_ID
AND PAPF1.EFFECTIVE_END_DATE(+) > TRUNC(SYSDATE)
AND PAPF2.PERSON_ID(+) =AIA.ATTRIBUTE8
AND PAPF2.EFFECTIVE_END_DATE(+) > TRUNC(SYSDATE)
AND AIA.BATCH_ID=ABA.BATCH_ID
AND AIDA.INVOICE_ID(+)=AIA.INVOICE_ID
AND AIDA.PO_DISTRIBUTION_ID=PDA.PO_DISTRIBUTION_ID(+)
AND PDA.PO_HEADER_ID=PHA.PO_HEADER_ID(+)
AND HOU.ORGANIZATION_ID = AIA.ORG_ID
AND ABA.BATCH_NAME LIKE '%'||V_DATE||'%'
ORDER BY HOU.NAME,ABA.BATCH_NAME
END






Re: PL SQL Code with variable [message #645929 is a reply to message #645924] Wed, 16 December 2015 08:21 Go to previous messageGo to next message
mashrima
Messages: 5
Registered: December 2015
Location: Bangalore
Junior Member
Sure i will go through the process and follow the same as your account created.
Re: PL SQL Code with variable [message #645931 is a reply to message #645927] Wed, 16 December 2015 08:24 Go to previous messageGo to next message
Michel Cadot
Messages: 68776
Registered: March 2007
Location: Saint-Maur, France, https...
Senior Member
Account Moderator

I will surely not count which line is line 73.
I will not make the effort to understand not formatted code.
If you don't make the effort to help us to help you, I don't see any reason for me to make any effort to help you.

Michel Cadot wrote on Wed, 16 December 2015 15:05

Welcome to the forum;

Please read OraFAQ Forum Guide and How to use [code] tags and make your code easier to read.
Also always post your Oracle version, with 4 decimals.

Format your query.
If you don't know how to do it, learn it using SQL Formatter.

Quote:
i am trying to execute the code with variable but getting an error.


There is no error message in your post.
Use SQL*Plus and copy and paste your session, the WHOLE session.



Re: PL SQL Code with variable [message #645932 is a reply to message #645929] Wed, 16 December 2015 08:26 Go to previous messageGo to next message
cookiemonster
Messages: 13975
Registered: September 2008
Location: Rainy Manchester
Senior Member
You're missing some semi-colons and an INTO clause.
If you don't understand the INTO clause or why you need one here then you need to stop writing code and crack open a book on PL/SQL. You'll get absolutely nowhere if you don't understand a concept that basic.
Re: PL SQL Code with variable [message #645936 is a reply to message #645923] Wed, 16 December 2015 08:52 Go to previous messageGo to next message
flyboy
Messages: 1903
Registered: November 2006
Senior Member
mashrima wrote on Wed, 16 December 2015 14:57
Hi ,

thanks for the reply and valuable suggestion.
how can i pass the value of variable in below AND condition with LIKE operator.
I do not have access other than SELECT so creating any object to hold the select values not possible.
you can suggest me any other method too

Hi,

it depends entirely on your client tool abilities. In sqlplus, you may use bind variables, as stated e.g. in SQL*Plus User's Guide and Reference, which is available with other Oracle documentation books e.g. online on http://docs.oracle.com/en/database/database.html
For 11gR2, the relevant example is placed here: http://docs.oracle.com/cd/E11882_01/server.112/e16604/ch_five.htm#i1211850

By the way, even in the initial try, the variable assignment and SELECT query would have to be in the same PL/SQL block. I see no benefit over passing the value into the query itself.
Re: PL SQL Code with variable [message #645937 is a reply to message #645931] Wed, 16 December 2015 09:03 Go to previous messageGo to next message
mashrima
Messages: 5
Registered: December 2015
Location: Bangalore
Junior Member
Hi ,

I have followed the rules and slightly went through the guideline.

here is code now and an attached is error screen.

--
 
DECLARE 
  v_date VARCHAR2(255):= To_char(SYSDATE-1, 'DDMONYY'); 
BEGIN 
  SELECT DISTINCT aba.creation_date "BATCH CREATION DATE", 
                  hou.name "OPERTAING_UNIT", 
                  pv.vendor_name supplier, 
                  aia.invoice_num "INVOICE NUM", 
                  aia.attribute3, 
                  pvs.vendor_site_code site, 
                  aia.invoice_amount "INVOICE AMOUNT", 
                  aia.invoice_date "INVOICE DATE", 
                  aia.invoice_type_lookup_code "TYPE", 
                  pv.segment1 "SUPPLIER NUM", 
                  aba.batch_name "Batch Name", 
                  aia.invoice_currency_code "INVOICE CURRENCY", 
                  apt.description terms, 
                  pha.segment1 "PO NUMBER", 
                  aia.description, 
                  aia.payment_method_code, 
                  aia.requester_id, 
                  aia.total_tax_amount, 
                  aia.payment_currency_code "PAYMENT CURRENCY", 
                  aia.pay_group_lookup_code "PAY GROUP", 
                  aia.terms_date, 
                  aia .gl_date, 
                  ( 
                         SELECT (0 - SUM(nvl(amount,0))) 
                         FROM   ap_invoice_distributions_all 
                         WHERE  invoice_id = aia.invoice_id 
                         AND    line_type_lookup_code = 'AWT')"WITHHELD AMOUNT", 
                  ( 
                         SELECT (0 - SUM(nvl(amount,0))) 
                         FROM   apps.ap_invoice_distributions_all 
                         WHERE  invoice_id = aia.invoice_id 
                         AND    ( 
                                       line_type_lookup_code = 'PREPAY' 
                                OR     line_type_lookup_code = 'TAX' 
                                AND    prepay_tax_parent_id IS NOT NULL)) "PREPAID AMOUNT", 
                  aia.payment_cross_rate_date "PAYMENT RATE DATE", 
                  aia.payment_cross_rate_type "PAYMENT RATE TYPE", 
                  aia.payment_cross_rate "PAYMENT RATE", 
                  aia.exchange_rate_type "RATE TYPE", 
                  aia.exchange_date "EXCHANGE DATE", 
                  aia.exchange_rate "EXCHANGE RATE", 
                  decode(aia.invoice_type_lookup_code, 
                         'PREPAYMENT', decode(aia.earliest_settlement_date, 
                                              '','PERMANENT', 
                                              'TEMPORARY')) "PREPAYMENT_TYPE", 
                  aia.earliest_settlement_date "SETTLEMENT DATE", 
                  aia.approval_ready_flag, 
                  papf1.full_name 
                                  ||'.....' 
                                  ||papf2.full_name 
                                  ||'.....' 
                                  ||aia.attribute4 
                                  ||'.....' 
                                  ||papf2.email_address "[ ]" 
  FROM            apps.ap_terms apt, 
                  apps.xxcfi_per_all_people_f_vw papf2, 
                  apps.xxcfi_per_all_people_f_vw papf1, 
                  apps.ap_supplier_sites_all pvs, 
                  apps.ap_suppliers pv, 
                  apps.ap_invoice_distributions_all aida, 
                  apps.ap_invoices_all aia, 
                  apps.po_distributions_all pda, 
                  apps.po_headers_all pha, 
                  apps.ap_batches_all aba , 
                  apps.hr_operating_units hou 
  WHERE           apt.term_id =aia.terms_id 
  AND             pv.vendor_id =aia.vendor_id 
  AND             pvs.vendor_site_id =aia.vendor_site_id 
  AND             papf1.person_id(+) =aia.requester_id 
  AND             papf1.effective_end_date(+) > trunc(SYSDATE) 
  AND             papf2.person_id(+) =aia.attribute8 
  AND             papf2.effective_end_date(+) > trunc(SYSDATE) 
  AND             aia.batch_id=aba.batch_id 
  AND             aida.invoice_id(+)=aia.invoice_id 
  AND             aida.po_distribution_id=pda.po_distribution_id(+) 
  AND             pda.po_header_id=pha.po_header_id(+) 
  AND             hou.organization_id = aia.org_id 
  AND             aba.batch_name LIKE '%' 
                                  ||v_date 
                                  ||'%' 
  ORDER BY        hou.name, 
                  aba.batch_name 
END; 

--
  • Attachment: Error.PNG
    (Size: 5.91KB, Downloaded 985 times)
Re: PL SQL Code with variable [message #645938 is a reply to message #645937] Wed, 16 December 2015 09:10 Go to previous messageGo to next message
Michel Cadot
Messages: 68776
Registered: March 2007
Location: Saint-Maur, France, https...
Senior Member
Account Moderator

No you have not.

Re: PL SQL Code with variable [message #645939 is a reply to message #645937] Wed, 16 December 2015 09:11 Go to previous messageGo to next message
BlackSwan
Messages: 26766
Registered: January 2009
Location: SoCal
Senior Member
cookiemonster wrote on Wed, 16 December 2015 06:26

If you don't understand the INTO clause or why you need one here then you need to stop writing code and crack open a book on PL/SQL. You'll get absolutely nowhere if you don't understand a concept that basic.
Re: PL SQL Code with variable [message #645941 is a reply to message #645937] Wed, 16 December 2015 09:26 Go to previous message
flyboy
Messages: 1903
Registered: November 2006
Senior Member
Besides the fact that SELECT statement requires the INTO clause inside PL/SQL block (as you were told twice) I have the same question again:
As the assignment and query are (and have to be) in the same PL/SQL block, do you see any benefit over accompanying it into the query itself?
SELECT DISTINCT ...
FROM ...
WHERE ...
  AND ba.batch_name LIKE '%'||to_char(SYSDATE-1, 'DDMONYY')||'%'
ORDER BY ...;
Previous Topic: Define/declare dates and use in CTE
Next Topic: Date conversion
Goto Forum:
  


Current Time: Fri Jun 26 20:04:36 CDT 2026