Sqlplus script output
I understand I can re-direct the query result to an output file using the SPOOL command in sqlplus. However, is there any way in sqlplus such that I can manipulate the data return from the query before spooling to the output file? Thanks in advance for your great help.
hi,
there are two possible options you can choose from to do that. First option is to use PL/SQL. Second option is to use the MODEL clause. You can visit the website of SnippetJoe to learn the MODEL clause. This is the link: http://www.sqlsnippets.com/en/topic-11663.html
Brett
Similar Messages
-
Call unix command in sqlplus script
Hello, I wanna to know how to call a unix command in the sqlplus script.
For exemple,
I've a sqlplus script to lauch a oracle report, after the report is generated, I wanne to replace the output file in an other directory.
So that, I have to call the unix command mv here in the sqlplus script
How can I do it?**
I completed my situation:
I don't have dbms_scheduler untility in my database.
Thanks a lot for your help
Edited by: user11930885 on 17 janv. 2010 14:53Yes, at the begining, I'll tried the unix shell by calling SQL.
I've the problem of passing the parameters through.
It seems to me
we can use
Host in the SQLPLUS to run the unix command.
but I've written it in my sqlplus script, it doesn't work. so I wanna to find an exemple how to use HOST in sqlplus script?
I would have loved to give you an example..but its not unix on my laptop.
But what i can tell you is...u should be doing otherway round.
Not calling Unix commands from SQL but calling SQL's form unix.
You got shell scripts for that.
Write a shell script. Login to SQL execute your code.
exit from sql and then move your file with MV. That's it.
Do post how far you get after trying this. -
Is it possible to remove the header from query results in the the script output window?
select 1 AS dont, 2 AS need, 3 AS a, 4 AS header, 5 AS thanks from dual;
DONT NEED A HEADER THANKS
1 2 3 4 5
I only want the row of "1 2 3 4 5".
In SQL Plus, I arrange like so:
SQL> select 1 AS dont, 2 AS need, 3 AS a, 4 AS header, 5 AS thanks from dual;
DONT NEED A HEADER THANKS
1 2 3 4 5
SQL> set heading off;
SQL> select 1 AS dont, 2 AS need, 3 AS a, 4 AS header, 5 AS thanks from dual;
1 2 3 4 5
SQL>
However, 'set heading off' in SQL Developer gives "line 1: SQLPLUS Command Skipped: set heading off;"
Is this possible? If not, can it be put in the request pile for a future release?Can't be done currently...
Requests should go to the announced SQL Developer Exchange, so others can vote on them.
Regards,
K. -
Script output missing rows affected
Hi,
I'm not sure when it happened, but I notice that the script output no longer tells you how many rows have been affected by DML.
eg,
in sqlplus, if I do
"> delete from xx;"
it tells me.
"3 rows deleted."
but in sql developer all I get is
"delete from xx succeeded."
Is there any way to get sqldeveloper to tell me how many rows have been affected if I "Run Script"? Haven't it output the number of rows affected is a great "double check" that my query did what I expected, having it just say "succeeded" just tells me that it did something..Hi,
I can now fix and reproduce this.
This morning I downloaded the latest MacOS version which reports as "MAIN-32.13" (same as the old one I was running). And what do you know, it correctly says the number of rows inserted/deleted/updated (I did not trash my prefs folders)
So, I diffed the two application directories, with the following differences.
laguna:Downloads $ diff -r SQLDeveloper.app/ /Applications/SQLDeveloper.app/
Only in /Applications/SQLDeveloper.app/Contents/Resources/sqldeveloper/ide/lib/patches: timesten_support.jar
Binary files SQLDeveloper.app/Contents/Resources/sqldeveloper/sqldeveloper/doc/sqldeveloper_help.jar and /Applications/SQLDeveloper.app/Contents/Resources/sqldeveloper/sqldeveloper/doc/sqldeveloper_help.jar differ
Only in /Applications/SQLDeveloper.app/Contents/Resources/sqldeveloper/sqldeveloper/doc: sqldeveloper_help.jar.backup
Only in /Applications/SQLDeveloper.app/Contents/Resources/sqldeveloper/sqldeveloper/extensions: oracle.sqldeveloper.timesten.jar
Only in /Applications/SQLDeveloper.app/Contents/Resources/sqldeveloper: timesten_readme.html
laguna:Downloads $
I then tried check for updates, and it picked up timesten extension, which I installed.
On the first restart after updates, I get the following error.
java.lang.IllegalAccessError: tried to access class oracle.ide.net.IdeURLStreamHandler from class oracle.ide.net.URLFileSystem$1
at oracle.ide.net.URLFileSystem$1.createURLStreamHandler(URLFileSystem.java:87)
at oracle.ide.boot.URLStreamHandlerFactoryQueue.createURLStreamHandler(URLStreamHandlerFactoryQueue.java:119)
at java.net.URL.getURLStreamHandler(URL.java:1104)
at java.net.URL.<init>(URL.java:393)
at java.net.URL.<init>(URL.java:283)
at oracle.ide.net.URLFactory.newURL(URLFactory.java:636)
at oracle.ide.layout.URL2String.toURL(URL2String.java:104)
at oracle.ideimpl.editor.EditorUtil.getURL(EditorUtil.java:150)
at oracle.ideimpl.editor.EditorUtil.getNode(EditorUtil.java:122)
at oracle.ideimpl.editor.EditorUtil.loadContext(EditorUtil.java:91)
at oracle.ideimpl.editor.TabGroupState.loadStateInfo(TabGroupState.java:950)
at oracle.ideimpl.editor.TabGroup.loadLayout(TabGroup.java:1751)
at oracle.ideimpl.editor.TabGroupXMLLayoutPersistence.loadComponent(TabGroupXMLLayoutPersistence.java:31)
at oracle.ideimpl.controls.dockLayout.DockLayoutInfoLeaf.loadLayout(DockLayoutInfoLeaf.java:123)
at oracle.ideimpl.controls.dockLayout.AbstractDockLayoutInfoNode.loadLayout(AbstractDockLayoutInfoNode.java:631)
at oracle.ideimpl.controls.dockLayout.AbstractDockLayoutInfoNode.loadLayout(AbstractDockLayoutInfoNode.java:628)
at oracle.ideimpl.controls.dockLayout.AbstractDockLayoutInfoNode.loadLayout(AbstractDockLayoutInfoNode.java:614)
at oracle.ideimpl.controls.dockLayout.DockLayout.loadLayout(DockLayout.java:302)
at oracle.ideimpl.controls.dockLayout.DockLayoutPanel.loadLayout(DockLayoutPanel.java:128)
at oracle.ideimpl.editor.Desktop.loadLayout(Desktop.java:356)
at oracle.ideimpl.editor.EditorManagerImpl.init(EditorManagerImpl.java:1879)
at oracle.ide.layout.Layouts.activate(Layouts.java:784)
at oracle.ide.layout.Layouts.activateLayout(Layouts.java:186)
at oracle.ideimpl.MainWindowImpl$6.runImpl(MainWindowImpl.java:734)
at oracle.javatools.util.SwingClosure$1Closure.run(SwingClosure.java:50)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:199)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:461)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:176)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
and my worksheets wont open (just stays with the blue background). Restarting fixes this, but... Back to the original problem.
If I then go and delete
/Applications/SQLDeveloper.app/Contents/Resources/sqldeveloper/sqldeveloper/
oracle.sqldeveloper.timesten.jar
and
/Applications/SQLDeveloper.app/Contents/Resources/sqldeveloper/ide/lib/timesten_support.jar
The problem is fixed again.. So its something with those Jars. -
Passing variables from shell script to separate sqlplus script
Hi, I am having issues passing variables to a separate sqlplus script invoked by the shell script, e.g.
#!/bin/sh
DB_NAME=TEST
PWD1=PA55W0rd
echo exit | sqlplus / as sysdba @${DB_NAME}.sql ${DB_NAME} $PWD1 >> ${DB_NAME}.sql
exit 0
The script picks up the $DB_NAME variable fine, and therefore invokes the required sql script.
However, when I pass the variable $PWD1 to the sql script I get an error.
The script creates a database link:
create or replace procedure new.link
is
begin
execute immediate 'create database link TEST
connect to TESTSCH identified by '$PWD1'
using ''TEST''';
end;
exec new.link;
output is:
ERROR at line 1:
ORA-00911: invalid character
ORA-06512: at "NEW.LINK", line 4
ORA-06512: at line 1
any help appreciated!
Edited by: 969765 on Apr 5, 2013 4:24 AM969765 wrote:
that is a pretty unhelpful comment, this is actually my LAST resort I have looked up all the documentation etc.This is what I did...
I went to the documentation:
http://www.oracle.com/pls/db112/homepage
I searched for "sqlplus" which gave me this documentation (under "SQL*plus program syntax")...
http://docs.oracle.com/cd/E11882_01/server.112/e16604/ch_three.htm#i1169374
I read the syntax:
SQLPLUS [ [Options] [Logon|/NOLOG] [Start] ]and the subsequent information:
>
where Start has the following syntax:
@{url|file_name[.ext]} [arg ...]and "Start" was hyperlinked, so I clicked on it, which took me to the section...
>
Start
@} [arg ...]
Specifies the name of a script and arguments to run. The script can be called from the local file system or from a web server.
SQL*Plus passes the arguments to the script as if executing the file using the SQL*Plus START command. If no file suffix (file extension) is specified, the suffix defined by the SET SUFFIX command is used. The default suffix is .sql.
See the START command for more information.
>
and here the "START" was hyperlinked, so I clicked on that...
and hey presto, I ended up here:
http://docs.oracle.com/cd/E11882_01/server.112/e16604/ch_twelve044.htm#BACJJHDA
... where the arguments are described...
>
arg ...
Data items you wish to pass to parameters in the script. If you enter one or more arguments, SQL*Plus substitutes the values into the parameters (&1, &2, and so forth) in the script. The first argument replaces each occurrence of &1, the second replaces each occurrence of &2, and so on.
>
... clearly explaining that SQL*Plus substitutes the substitution variables &1, &2 etc. in the script with the passed in arguments.
Your script was including a Unix style substitution, not an SQL*Plus script substitution, so that's seems to be the most likely cause of your problem.
And still you haven't come back to say whether it's worked for you or not... leaving others guessing as to whether you still need help. -
How to Schedule Job using Database Control for SQLPLUS script?
Hi All,
I am using Database version 10.2. I would like to schedule a SQLPLUS script job using Database control (Not using Grid Control!). The following is the script.
========================================================
define OEM_FRIENDLY=1
define OWB_BACKGROUND=0
set serveroutput on
set verify off
whenever sqlerror exit failure;
define REPOS_OWNER='&1.'
define LOCATION_NAME='&2.'
define TASK_TYPE='&3.'
define TASK_NAME='&4.'
define SYSTEM_PARAMS='&5.'
define CUSTOM_PARAMS='&6.'
alter session set current_schema = &REPOS_OWNER.;
set role owb_d_&REPOS_OWNER., owb_o_&REPOS_OWNER.;
variable exec_return_code number;
begin
-- Initialize Return Code
:exec_return_code := wb_rt_api_exec.RESULT_FAILURE;
-- Run Task
:exec_return_code := wb_rt_api_exec.run_task('&LOCATION_NAME.',
'&TASK_TYPE.',
'&TASK_NAME.',
'&CUSTOM_PARAMS.',
'&SYSTEM_PARAMS.',
&OEM_FRIENDLY.,
&OWB_BACKGROUND.);
end;
exit :exec_return_code;
===========================================================
Is it possible to schedule SQLPLUS script with 6 different parameters? If yes then how can I schedule for monday to friday or only for Saturday and sundays.
Please provide brief steps.
Thanks for your help in advance.
- MehulLet me explain to you about scheduler.
You can schedule a pl/sql stored procedure TEST_S as follows...
Begin
dbms_scheduler.create_job(
job_name=>'MY_JOB',
Job_Type=>'STORED_PROCEDURE',
job_action=>'TEST_S',
start_date=>sysdate,
repeat_interval=>'freq=monthly;BYDAY=MON,TUE,WED,THU,FRI',
end_date=>null');
END;
You can also also execute o/s script like .bat or .sh. For this job type should be EXECUTABLE.
Example of converting a .sql script in .bat script...
insert.sql
insert into dept values(50,'IT','LONDON');
exit
insert.bat
sqlplus scott/tiger @insert.sql
Executing now...
C:\Documents and Settings>insert.bat
C:\Documents and Settings>sqlplus scott/tiger @insert.sql
SQL*Plus: Release 10.2.0.1.0 - Production on Thu Mar 1 08:01:00 2007
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
1 row created.
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - P
oduction
With the Partitioning, OLAP and Data Mining options
C:\Documents and Settings>
So first read about DBMS_SCHEDULER and do the work in prompt. Then you can go and schedule it even by database control.
Scheduling by database control...
http://www.oracle.com/technology/oramag/oracle/04-jul/o44tech_dba.html
Scheduler
http://download-uk.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_sched.htm#CIHEHDHA
PS: By default each job you created is disable state. Please enable it by enable procedure of DBMS_SCHEDULER package. -
How to write errors in sqlplus script into logging table?
Hi,
I am having sqlplus script which do some DDL and DML statements.
Now is there any way to logg errors which pop up when the script is esxecuting?
For example something like:
WHENEVER SQLERROR EXIT SQL.SQLCODE
BEGIN
/* SOME DDL OR DDL */
CREATE TABLE A
COL_1 NUMBER,
COL_2 NUMBER
/* Wrong sql statement */
INSERT INTO TABLE_DOWS_NOT_EXISTS(....);
EXCEPTION WHEN OTHERS THEN
INSERT INTO logging_tbl (error_description) VALUES(SQL.SQLCODE);
END;
I know, this one will tell sqlplus to exit with sql error code without trapping into exception section, but is there any way to handle it?
ThanksAn approach would be to enable spooling in the beginning of your script. Wrap dbms_output into an error_log procedure. The error_log should simple write an errorcode + message to the prompt.<br>Afterwards - a search batchjob or manual search for errorcode occurances in the script spool file(s) should reveal the outcome.
-
Passing a FILENAME from a LINUX SHELL Script to an SQLPLUS Script
I written a LINUX Shell Script to receive a FILENAME. This FILENAME is the name of the file that I want to SPOOL into.
So, below are two items.
The first item is the LINUX Shell Script that has the FILENAME
The last item is the SQLPLUS Script that is suppose to receive the name
The LINUX Shell Script:
#! /bin/sh
LOGFILE="$(date +"%Y-%m-%d %H:%M") Oracle REPORT LOG.TXT"
FILENAME="$(date +"%Y-%m-%d") PROD Unfinished Spot Bids.CSV"
echo "File Name for the spool is:" "$FILENAME"
#spool "$FILENAME"
#sqlplus /nolog @run_test_query.sql
#sqlplus -S @Unfinished_Spot_Bids_Run_V1.sql >$LOGFILE
sqlplus -S /nolog <<EOF >$LOGFILE
/* I want to pass to the SQL file below */
/* The value that is contained in the the variable $FILENAME */
/* How do you do that? */
@@Unfinished_Spot_Bids_V1.sql
spool
set echo on
EOF
RV=$?
#if {$RV -ne 0}
#exit $RV
#else
echo "The return code fronm the sqlplus was:" "$RV"
#fi
Here is the SQLPLUS Script
CONNECT glog_read/parker@OTMPROD
set linesize 32000 trimspool on pagesize 3000
set echo off
SET TERMOUT OFF
set heading off
/* I want to parameterize the name of the file below */
/* This file is executed from inside a LINUX Shell Script */
/* That LINUX SHELL script is passed a file name */
/* I want that filename used in the "SPOOL" statement below */
/* So, how do I do that? */
spool PROD_Unfinished.CSV
prompt Shipment Update Date|Shipment Number|No of Shipments|Auctions per Shipment|No. of Carriers Notified|No of Bidders|Duration of Auction|Elapse time for first bid|Elapse time for last bid|Elapse time of bidding|Lead Time of Auction to P/U|High Bid- Low Bid Diff|
set feedback off
SELECT
to_char(c.update_date, 'FMMonth, YYYY')||'|'|| b.SHIPMENT_GID
||'|'|| count (distinct (b.SHIPMENT_GID))
||'|'|| count(distinct(a.i_transaction_no))
||'|'|| count(*)
||'|'|| sum (case when a.responding_gl_user_gid is null then 0 else 1 end)
||'|'|| min (numtodsinterval((b.expected_response - b.insert_date),'day'))
||'|'|| min (numtodsinterval((a.update_date - a.transaction_time),'day'))
||'|'|| max (numtodsinterval((a.update_date - a.transaction_time),'day'))
||'|'|| numtodsinterval((max(a.update_date) - min(a.update_date)),'day')
||'|'|| numtodsinterval((max(b.shipment_time) - max(c.insert_date)),'day')
||'|'|| (max(a.bid_amount) - min(a.bid_amount))
from tender_collab_servprov a, tender_collaboration b, shipment c
where a.i_transaction_no = b.i_transaction_no
and b.shipment_gid not in (select sqa.shipment_gid from tender_collaboration sqa, tender_collab_servprov sqb where sqa.i_transaction_no = sqb.i_transaction_no and sqb.acceptance_code = 'A')
and a.i_transaction_no in (select i_transaction_no from tender_collaboration where tender_type = 'Spot Bid')
and b.shipment_gid = c.shipment_gid
AND c.update_date >= trunc(last_day(to_date((to_char(add_months(SYSDATE,-2), 'MM-DD-YYYY')),'MM-DD-YYYY')) + 1)
group by c.update_date, b.SHIPMENT_GID
order by c.update_date, b.shipment_GID;
spool offParadicePGMR wrote:
First, I was getting an error on the SPOOL ${FILENAME}. Also, my file did have spaces and I did replace it with "_". It still did not work on the SPOOL Command. So, with or without the _, I never got the SPOOL command to work!
It seems that the FILENAME value from the LINUX script was not being passed into the SQLPLUS procedure.
How do you pass LINUX variables into the SQLPLUS procedure>
Not sure if I had the right usage => ${FILENAME}above is correct syntax -
Changes are not reflected in Script output
Hi All,
i am facing a problem in SAPscript.
I have made a Zscript by copying standard script F110_FR_CHEQUE. I have made the changes in the script as per requirement in development client and transported it to testing client to test (As i dont have any data in development client). But, surprisingly, when i run the program and check the output, the changes are not reflected in the script output.
First i thought that my script was not triggered thats whay i m not getting any change, but later i changed the dimension of one of the window, in which some hard coded text is written, the differece i found was that, window size is changed, but the text written in that window is still same (what was in standard script.) .
I am using standard texts for hard coding in script. Standard texts have been transported in testing client also.
please help me in this regard.Hi,
Could you plese Check NACE whether your script is confiugring or not.
If it is configured well then Check Standard Text is available or not in Test client by open it in SO10.
Check all the paragrah formats applied to Standard text are transferred to Test client which are in SE72.
IF it is available in SO10 then debug the print program for that windows any standard conditions are calling to print the text. -
Convert Script output data to Text(.txt) file & send mail with attachment.
Hi All,
Requirement: I shulb be able to conver th Script output data to Text(.text) file & send a maill with attachment with this text file. Formant of text file should be like output of Print priview.
Plese sugget with Function modules to cover as Text file.
I am able to converting the Script output data to PDF and sending mail with attachment. So I don't want PDF file now.
Thanks in advance.Hi, Thanks for responst.
We can convert the Scirpt output to PDF file by using OTF function module and the PDF file looks like Print Privew output.
Same like this I want Script out in NOTEPAD (.txt). Is that possible, Plz sugget with relavent Function Modules.
Thanks. -
4.0EA1 - Copy/Paste in Script Output window on Mac is not working
I'm running 4.0.0.12 on MacOS X 10.8.4, and I can't Copy from the "Script Output" window. What I regularly do is generate some SQL using an SQL query, so I want to copy the output and paste it back into the Worksheet so I can run it. For example:
select 'alter tablespace ' || TABLESPACE_NAME || ' begin backup;' from DBA_TABLESPACES;This is a known issue and will be addressed for the next EA release.
-
Problem in script output sending mail
hi ,
I have a problem sending a mail with script output as attachment . I have searched in the forum for the answers but none is solved my question.
I am sending the data to the otf and it is getting the otfdata. but it is not showing the data on the script when it is sent as an attachment to the email , but it is showing only script with null values filled.( means i am getting the mail with attachment but in that attachment there is no data filled in the script send).
the code is like this ..
here i am filling the otfdata and i am exporting the otfdata
CALL FUNCTION 'ZMM_ARRANG_ENTRY_ABR_NATRAB'
EXPORTING
i_nast = nast
i_fonam = tnapr-fonam
i_xscreen = pi_xscreen
i_arc_params = arc_params
i_toa_dara = toa_dara
IMPORTING
e_retcode = px_retcode
EXCEPTIONS
OTHERS = 1.
IF ( sy-subrc <> 0 ). "Fehler
MOVE sy-subrc TO px_retcode.
IF ( pi_xscreen = 'X' ). "Ausgabe auf Bildschirm
MESSAGE ID sy-msgid
TYPE sy-msgty
NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ELSE.
*---Import OTFDATA from the memory
IMPORT it_otfdata FROM MEMORY ID 'OTF'.
ENDIF.
wa_maildata-obj_name = 'EMAIL'.
wa_maildata-obj_descr = 'Settlement Details'.
*-----mail contents
it_mailtext-line = 'Sub-sequent settlement Details'.
APPEND it_mailtext.
DESCRIBE TABLE it_mailtext LINES v_lines.
READ TABLE it_mailtext INDEX v_lines.
wa_maildata-doc_size = ( v_lines - 1 ) * 255 + STRLEN( it_mailtext ).
*Creation of the entry for the compressed document
CLEAR it_mailpack-transf_bin.
it_mailpack-head_start = 1.
it_mailpack-head_num = 0.
it_mailpack-body_start = 1.
it_mailpack-body_num = v_lines.
it_mailpack-doc_type = 'RAW'.
APPEND it_mailpack.
*-----Get OTF data
LOOP AT it_otfdata.
it_mailcont-line = it_otfdata.
APPEND it_mailcont.
ENDLOOP.
*---Move OTF data into binary table
LOOP AT it_mailcont.
MOVE-CORRESPONDING it_mailcont TO it_mailbin.
APPEND it_mailbin.
ENDLOOP.
*---Get no of lines in Binary data table
DESCRIBE TABLE it_mailbin LINES v_lines.
*---Fill name of the header of email
it_mailhead = 'Subsequent Settlement Details.OTF'.
APPEND it_mailhead.
*---Creation of the entry for the compressed attachment
it_mailpack-transf_bin = 'X'.
it_mailpack-head_start = 1.
it_mailpack-head_num = 1.
it_mailpack-body_start = 1.
it_mailpack-body_num = v_lines.
it_mailpack-doc_type = 'OTF'.
it_mailpack-obj_name = 'EMAIL'.
it_mailpack-obj_descr = 'Settlement Details'.
it_mailpack-doc_size = v_lines * 255.
APPEND it_mailpack.
*----Get email address from the address number of vendor
CALL FUNCTION 'ADDR_GET_REMOTE'
EXPORTING
addrnumber = l_adrnum
TABLES
adsmtp = it_adsmtp.
*----Get mail address
READ TABLE it_adsmtp WITH KEY remark = 'AP_SUB_SETT'.
IF sy-subrc = 0.
it_mailrec-receiver = it_adsmtp-smtp_addr.
it_mailrec-rec_type = 'U'.
it_mailrec-com_type = 'EXT'.
APPEND it_mailrec.
*---Send email with PDF attachment
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data = wa_maildata
put_in_outbox = 'X'
COMMIT_WORK = 'X'
TABLES
packing_list = it_mailpack
object_header = it_mailhead
contents_bin = it_mailbin
contents_txt = it_mailtext
receivers = it_mailrec.
ELSE.
MESSAGE 'No email id Exist for the vendor' TYPE 'E'.
ENDIF.
please suggest me with your valuable answers .
Regards,
Venkat Appikonda.Hi venkat
Just check if this helps you.
The following part of the code does exactly that.
Selecting details from the spool request table.
SELECT * FROM tsp01 INTO TABLE tb_spool
WHERE rqowner = sy-uname.
IF sy-subrc EQ 0.
SORT tb_spool DESCENDING BY rqcretime.
CLEAR : tb_spool.
READ TABLE tb_spool INDEX 1.
convert spool into PDF format.
CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF'
EXPORTING
src_spoolid = tb_spool-rqident
TABLES
PDF = tb_lines.
ENDIF.
After this, on execution we get the below mentioned message.
This indicates that a PDF of the SAP Script has been created which is in the format u201C132-long stringsu201D.
In order to send the mail across, the mailing format of the PDF supports u201C255-long stringsu201D. So, the present u201C132-long stringsu201D needs to be converted into u201C255-long stringsu201D. This along with the mail code is mentioned below.
DATA: lv_receiver(50) TYPE c.
REFRESH: tb_obj_txt,
tb_obj_bin,
tb_obj_head,
tb_paklist,
tb_receiver.
CLEAR: tb_obj_txt,
tb_obj_bin,
tb_paklist,
tb_obj_head,
tb_receiver.
CLEAR: tb_adrc.
IF NOT tb_adrc[] IS INITIAL.
Reading the address table with the key as address number.
READ TABLE tb_adrc WITH KEY addrnumber = tb_kna2-adrnr.
IF sy-subrc EQ 0.
Vendor Email ID.
SELECT SINGLE smtp_addr
FROM adr6
INTO wf_mailaddr
WHERE addrnumber = tb_adrc-addrnumber.
IF sy-subrc EQ 0.
Moving the mail address to the receiver itab
MOVE wf_mailaddr TO tb_receiver-receiver.
tb_receiver-rec_type = text-011.
APPEND tb_receiver.
ELSE.
CONCATENATE text-004 tb_kna2-kunnr text-005 INTO lv_receiver
SEPARATED BY space.
If pa_call is initial, the receiver ID is printed; else an INVALID E-mail ID message gets flashed.
IF pa_call IS INITIAL.
WRITE :/ lv_receiver.
ENDIF.
CLEAR: itab.
itab-kunnr = tb_kna2-kunnr.
itab-message = lv_receiver.
APPEND itab.
EXIT. u201CNo mailing for invalid Email id
ENDIF.
ENDIF.
ENDIF.
wf_name = sy-uname.
wf_year = tb_main-bldat(4).
wf_mon = tb_main-bldat+4(2).
*This FM gives the name of the months.
CALL FUNCTION 'MONTH_NAMES_GET'
EXPORTING
language = sy-langu
TABLES
month_names = tb_months.
IF sy-subrc EQ 0.
READ TABLE tb_months WITH KEY mnr = wf_mon.
IF sy-subrc EQ 0.
wf_name = tb_months-ktx.
ENDIF.
ENDIF.
CLEAR: tb_contp.
IF NOT tb_contp[] IS INITIAL.
*Reading the contp itab as per the customer entered on the selection screen.
READ TABLE tb_contp WITH KEY bukrs = pa_bukrs
kunnr = tb_kna2-kunnr.
IF sy-subrc EQ 0.
CONCATENATE text-006 text-008 tb_contp-contp text-008 tb_kna2-kunnr
text-008 wf_name text-008 wf_year INTO wf_sub.
ENDIF.
ELSE.
CONCATENATE text-006 text-008 tb_kna2-kunnr text-008 wf_name
text-008 wf_year INTO wf_sub.
ENDIF.
Subject and Description
CLEAR wa_docdata.
wa_docdata-obj_name = text-007.
wa_docdata-obj_descr = wf_sub.
wa_docdata-obj_langu = sy-langu.
Write main body
tb_obj_txt = text-009.
APPEND tb_obj_txt.
CLEAR tb_obj_txt.
CLEAR tb_paklist.
tb_paklist-head_start = 1.
tb_paklist-head_num = 3.
tb_paklist-body_start = 1.
tb_paklist-body_num = 60.
tb_paklist-doc_type = text-012.
APPEND tb_paklist.
CLEAR tb_paklist.
create PDF file
Transfer the 132-long strings to 255-long strings
LOOP AT tb_lines.
TRANSLATE tb_lines USING ' ~'.
CONCATENATE wf_buffer tb_lines INTO wf_buffer.
ENDLOOP.
TRANSLATE wf_buffer USING '~ '.
DO.
tb_obj_bin = wf_buffer.
APPEND tb_obj_bin.
SHIFT wf_buffer LEFT BY 255 PLACES.
IF wf_buffer IS INITIAL.
EXIT.
ENDIF.
ENDDO.
DESCRIBE TABLE tb_obj_bin LINES lv_lines.
READ TABLE tb_obj_bin INDEX lv_lines.
lv_size = ( lv_lines - 1 ) * 255 + STRLEN( tb_obj_bin ).
Create attachment notification
tb_paklist-transf_bin = co_x.
tb_paklist-head_start = 1.
tb_paklist-head_num = 0.
tb_paklist-body_start = 1.
tb_paklist-body_num = lv_lines.
tb_paklist-doc_type = text-013.
tb_paklist-obj_descr = text-010.
tb_paklist-obj_name = text-010.
tb_paklist-doc_size = lv_size.
APPEND tb_paklist.
*mail the PDF to the receiver.
CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
EXPORTING
document_data = wa_docdata
sender_address = wf_name
sender_address_type = text-014
TABLES
packing_list = tb_paklist
object_header = tb_obj_head
contents_bin = tb_obj_bin
contents_txt = tb_obj_txt
receivers = tb_receiver
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
document_type_not_exist = 3
operation_no_authorization = 4
parameter_error = 5
x_error = 6
enqueue_error = 7
OTHERS = 8.
IF sy-subrc <> 0.
CONCATENATE text-003 tb_kna2-kunnr text-005 INTO lv_receiver
SEPARATED BY space.
CLEAR: itab.
itab-kunnr = tb_kna2-kunnr.
itab-message = lv_receiver.
APPEND itab.
IF pa_call IS INITIAL.
WRITE :/ lv_receiver.
ENDIF.
ELSE.
CONCATENATE text-002 tb_kna2-kunnr text-005 INTO lv_receiver
SEPARATED BY space.
CLEAR: itab.
itab-kunnr = tb_kna2-kunnr.
itab-message = lv_receiver.
APPEND itab.
IF pa_call IS INITIAL.
WRITE :/ lv_receiver.
ENDIF.
ENDIF.
Hope this helps.
Harsh -
How to print a standard text of 3 pages in the script output?
Hi all,
I want to print a standard text as an include in the script output.
But the standrad text is of 3 pages conataining continuous (some terms and condtitions) text.
But while executing driver program, I am getting a STOP messgae pop-up saying 'Output is continuous or contains too many pages (>4)'.
How to get the standard text of 3 pages in the output. The standard text is to be printed at the bottom of the output.
Thanks,
SachinHi ,
To display standard texts you have to create a include in your script below is the syntax for that:
INCLUDE name OBJECT name ID name PARAGRAPH name LANGUAGE name
Include command is used to include standard text in a form.the text
should be already defined by using transaction SO10.
Here name is the name of text
ID is used to classify text e.g. SDVD (SD related text) , ST (Standard text)
OBJECT is used to specify type of object it an be TEXT , DOKU
LANGUAGE is used to specify language like EN ,if ommited than logon
language is used
PARAGRAPH is used to specify the paragraph like C
e.g. /:INCLUDE mytext OBJECT TEXT ID ST LANGUAGE EN
Here the standard text created in SO10 with name mytext is
included in the form in language EN (English)
Please let me know if you have still any confusion.
Thanks
Narendra Vikram Vishwakarma -
Reg: Script Output in PDF form
Hai..
Can anybody tell me how we will get script output
(P.order output) in PDF format and we need to downlaod this PDF to our local drives. plz tell me the function modules to be used for this requirement and paste the code if any of you worked on this earlier..
RegardsCheck this link for sample program.
https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/49e15474-0e01-0010-9cba-e62df8244556
https://www.sdn.sap.com/irj/sdn/wiki?path=/display/snippets/downloadSAPScriptoutputtoPDF+file.&
Function Module: CONVERT_OTF
Regards,
Maha -
To convert Sap Script output to PDF format and send it via email.
Hi Friends,
Could any one please tell me, how to convert the Sap Script output to PDF format and send it via email. If any one have the code, kindly mail me to [email protected]
Thanks & Regards,
JohnPlese check this sample code from other thread.
REPORT zzz_jaytest .
Types Declaration
TYPES : BEGIN OF ty_pa0001,
pernr TYPE pa0001-pernr,
bukrs TYPE pa0001-bukrs,
werks TYPE pa0001-werks,
END OF ty_pa0001.
Internal Table Declaration
DATA : i_pa0001 TYPE STANDARD TABLE OF ty_pa0001, "For pa0001 Details
i_otf TYPE STANDARD TABLE OF itcoo, "For OTF data
i_content_txt TYPE soli_tab, "Content
i_content_bin TYPE solix_tab, "Content
i_objhead TYPE soli_tab,
Work Area Declaration
w_pa0001 TYPE ty_pa0001, "For pa0001 Details
w_res TYPE itcpp, "SAPscript output
"parameters
w_otf TYPE itcoo, "For OTF
w_pdf TYPE solisti1, "For PDF
w_transfer_bin TYPE sx_boolean, "Content
w_options TYPE itcpo, "SAPscript output
"interface
Variable Declaration
v_len_in TYPE so_obj_len,
v_size TYPE i.
Constants Declaration
CONSTANTS : c_x TYPE c VALUE 'X', "X
c_locl(4) TYPE c VALUE 'LOCL', "Local Printer
c_otf TYPE sx_format VALUE 'OTF', "OTF
c_pdf TYPE sx_format VALUE 'PDF', "PDF
c_printer TYPE sx_devtype VALUE 'PRINTER', "PRINTER
c_bin TYPE char10 VALUE 'BIN', "BIN
c_name TYPE string VALUE 'C:\ZZZ_JAYTEST.PDF',"Downloading
"File Name
c_form(11) TYPE c VALUE 'ZZZ_JAYTEST'. "Form Name
START-OF-SELECTION.
Selecting the records from pa0001
SELECT pernr bukrs werks FROM pa0001
INTO TABLE i_pa0001 UP TO 10 ROWS.
Setting the options
w_options-tdcopies = 1 ."Number of copies
w_options-tdnoprev = c_x."No print preview
w_options-tdgetotf = c_x."Return of OTF table
w_options-tddest = c_locl."Spool: Output device
Opening the form
CALL FUNCTION 'OPEN_FORM'
EXPORTING
form = c_form
device = c_printer
language = sy-langu
OPTIONS = w_options
IMPORTING
RESULT = w_res.
LOOP AT i_pa0001 INTO w_pa0001.
Writting into the form
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'MAIN'
window = 'MAIN'.
ENDLOOP.
Closing the form
CALL FUNCTION 'CLOSE_FORM'
IMPORTING
RESULT = w_res
TABLES
otfdata = i_otf
EXCEPTIONS
unopened = 1
bad_pageformat_for_print = 2
send_error = 3
spool_error = 4
codepage = 5
OTHERS = 6.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
Converting OTF data to single line
LOOP AT i_otf INTO w_otf.
CONCATENATE w_otf-tdprintcom w_otf-tdprintpar
INTO w_pdf.
APPEND w_pdf TO i_content_txt.
ENDLOOP.
Converting to PDF Format
CALL FUNCTION 'SX_OBJECT_CONVERT_OTF_PDF'
EXPORTING
format_src = c_otf
format_dst = c_pdf
devtype = c_printer
CHANGING
transfer_bin = w_transfer_bin
content_txt = i_content_txt
content_bin = i_content_bin
objhead = i_objhead
len = v_len_in
EXCEPTIONS
err_conv_failed = 1
OTHERS = 2.
v_size = v_len_in.
Downloading the PDF File
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
bin_filesize = v_size
filename = c_name
filetype = c_bin
TABLES
data_tab = i_content_bin.
The extension is put the it_mailpack-obj_name parameter of 'SO_NEW_DOCUMENT_ATT_SEND_API1'.
Maybe you are looking for
-
Match Credit memo from Payables Open interface import.
We have a requirement wherein we have to load Standard invoices as well as their corresponding credit memo match. The user guide only mentions about matching to a PO or reciept but not to a standard invoice As per metalink note 422659.1 "So the Enter
-
Windows 7 64bit install error code 2605
Tried repeatedly to install itunes 10.7 on a Windows & 64 bit PC without any success. During install, I get a repeated message saying that the PC is running in safe mode or displays error code 2605. Any help would be great!
-
Best way to add and remove JPanels?
I have a question on the best practice in removing and then adding JPanels. I know a few ways about doing it but it never seems to work just how I want it to. Any help would be great. Also if anyone wants to give tips on better ways of writing this c
-
I need a little help help with the Spreadsheet 9 ActiveX control
Here's the situation: I want to import data from an Excel file to the MS Office Spreadsheet 9.0 ActiveX control on the LV front page. I can retrieve the data just fine but I can't get it to display in the control on the front page. I can select a ran
-
Error in Quotations. When a Quotation Id(Hyperlink) is clicked in the result list, the overview page is not displayed. That is, The Quotation details are not displayed. This issue is reported when Webui is logged-in with a different login user id. If