Executing Java CGI Program and Returning Result to Browser
Hi all, I'm an experienced ASP/PHP/JS programmer but completely new to Java. I'm building a site where I need to execute the same piece of code in every language I can manage, and I'm onto Java. For the purpose of illustration, my goal is to replicate the following PHP code as Java code:
<?php echo($_GET['message']); ?>I've written and compiled a "Hello World!" application and uploaded it to my server (Dreamhost shared hosting, Linux platform with JDK installed). Using this line form telnet, the application prints "Hello World!" to the screen:
java -classpath . helloworld.classSo, following a very old tutorial I found online, I created a CGI script and CHMOD'd it to 755 containing the following:
#!/usr/sh /usr/bin/java -classpath . regex.classBut this returns a 500 "Internal server error". After a few unsuccessful alterations I tried to emulate the CGI script in PHP like so:
<?php exec('java -classpath . regex', $output); echo(join($output, '<br />')); ?>But all I get back from that is "Error occurred during initialization of VM. Could not reserve enough space for code cache".
Any advice would be very much appreciated. I can learn the Java language - there's plenty of resources available for that, but I'm struggling to get started because I can't get the application to run as CGI.
Many Thanks,
-William
wwarby wrote:
Hi, and thanks for the responses.
paulcw, my ultimate goal is obviously a little more ambitious than printing "Hello World!" to the browser but for simplicity's sake I thought I'd start there. I tried this in a .cgi file:
#!/bin/sh
/usr/local/dh/java -version...and I still get a 500 internal server error. I have uploaded the script in ASCII mode and CHMOD'd it to 755, and checked with my host that I have the Java path correct (I've also tried just "java" and "/usr/bin/java" which do the same thing).Well that's because you're confusing running Java generally vs running it as a CGI vs running ANYTHING as a CGI. The web server expects CGI scripts to send certain content to standard output, and in a certain format. Generally speaking it's headers, then a blank line, then other content.
Furthermore, I think you might be confusing executing arbitrary code from PHP vs executing a CGI script. I'm not familiar with PHP but the way you called exec suggests to me that it can run arbitrary code and doesn't expect the output to necessarily be in CGI format.
You've got to do things one step at a time here.
spoon_, the #!/usr/sh" thing was a mistake on the forum post - in the script it is "#!/bin/sh" and it is on a line of it's own. The full .cgi file is now:
{code}#!/bin/sh
/usr/local/dh/java -classpath . hello{code}
And the .java file is now:
{code}class hello {
public static void main(String args[]) {
System.out.println("Content-type: text/html");
System.out.println();
System.out.println("Hello World!");
}{code}
as per your instructions. I compliled it on the server using javac, and when I run:
{code}java -classpath . hello{code}
in telnet, it returns:
{code}Content-type: text/html
Hello World!{code}
to the telnet window. Unfortunately when run from the CGI script I still get the 500 Internal server error.Have you checked your web server logs?
I'm going to guess here that your web server doesn't have permission to run the JVM executable.
That's an interesting path: "/usr/local/dh". What does "dh" stand for?
My server definitely supports Java (version 1.5.0_02) and CGI - it says so on their Wiki and specifically mentions Java as one of the languages that CGI scripts can use. What am I doing wrong?
Edited by: wwarby on Dec 25, 2007 1:30 AMCheck your web server logs. There should be both an access log and an errors log. The errors log will probably contain more information.
Similar Messages
-
Possible to extend java Concurrent Program and replace standard??
Hi All!
i have following developing need. There is a java concurrent program POXPOPDF (PO Output for Communication). The customer needs this program to do actually something complete different than printing the PO in PDF. The executable for this CP is java class PoGenerateDocumentCP in oracle.apps.po.communicate package.
We thought that we may be able to extend that class and then in some way made OA to use the extended java class instead of the standard. This is possbile and simple for OA Framework pages unsing classes as controllers, but I don't know how it could be done for CP (if there's a way to do it without violent intervention in standard system).. Is it possbile, can anyone help me with this.
The thing is that instead of reformatting the XML returned from PO_COMMUNICATION_PVT.POXMLGEN (function POXMLGEN in database package PO_COMMUNICATION_PVT) into PDF we want to reformat into another XML and then send it in other way to a webservice. Once I have the XML from POXMLGEN I have no problem to reformat it into another XML (I think, I have done it iwith other issues/processes). The webservice and the call to it is no problem and is already use with other purposes in other processes, but here (replaceing this stadard java class for an extension/new one) I am a little lost.
Appreciate very much your help.
Regards,
PatriciaNever mind, I see now that FND_REQUEST.SUBMIT_REQUEST() really does work, I tried with a different standard java concurrent program and it worked fine, and then I figured out that my parameters into fnd_request.submit_request for concurrent program APXVVCF4 were not correct (application short name was invalid for concurrent program).
Thanks for the Info! -
How to call an alv report from another program and return back
Hello ,
I am calling one abap program (Prgm B) from another program (Prgrm A).
Here, Prgm B is an ALV report. I have fetch some data from Prgem B that gets stored in an internal table.
Now, I am using below code in Prgrm A,
SUBMIT Prgrm B VIA SELECTION-SCREEN
WITH SELECTION-TABLE rspar
EXPORTING LIST TO MEMORY
AND RETURN.
When Prgrm A executed, it lead me to selection screen of Prgrm B and when I click F8, it shows me the report output, In short, it doesnt return back to Prgrm A. It ends up showing me the alv report if Prgrm B even afetr using RETURN statement.
I want to get back to Prgrm A by fetching some data from Prgrm B.
Please let me know, if i am missing something.
Regards,
SeemaHi Seema,
Refer below code.
DATA: v_matnr LIKE mara-matnr.
DATA: t_listobject TYPE abaplist OCCURS 0 WITH HEADER LINE.
DATA: t_mara TYPE mara OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF t_ascilist OCCURS 0,
line(200).
DATA: END OF t_ascilist.
data var(3) type c.
SELECT-OPTIONS: s_matnr FOR v_matnr.
var = ' 3'.
START-OF-SELECTION.
SUBMIT ztestaks1 WITH s_matnr IN s_matnr EXPORTING LIST TO MEMORY
AND RETURN.
CALL FUNCTION 'LIST_FROM_MEMORY'
TABLES
listobject = t_listobject
EXCEPTIONS
not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
CALL FUNCTION 'LIST_TO_ASCI'
* EXPORTING
* LIST_INDEX = -1
* WITH_LINE_BREAK = ' '
TABLES
listasci = t_ascilist
listobject = t_listobject
EXCEPTIONS
empty_list = 1
list_index_invalid = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
WRITE:/ 'Below are the lines from the submitted program.'.
LOOP AT t_ascilist.
WRITE:/ t_ascilist-line.
ENDLOOP.
SKIP 2.
ENDIF.
ENDIF.
IMPORT t_mara FROM MEMORY ID 'T_MARA'.
WRITE:/
'Here is the output from the table exported from the submitted program.'
LOOP AT t_mara.
WRITE:/ t_mara-matnr.
ENDLOOP.
Submitted program
REPORT ZTESTAKS1.
DATA: v_matnr LIKE mara-matnr,
v_maktx LIKE makt-maktx.
DATA: t_mara TYPE mara OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF t_makt OCCURS 0,
matnr LIKE makt-matnr.
DATA: END OF t_makt.
SELECT-OPTIONS: s_matnr FOR v_matnr,
s_maktx FOR v_maktx.
START-OF-SELECTION.
SELECT matnr INTO TABLE t_makt
FROM makt
WHERE matnr IN s_matnr
AND maktx IN s_maktx.
if not t_makt[] is initial.
SELECT * FROM mara
INTO TABLE t_mara FOR ALL ENTRIES IN t_makt
WHERE matnr = t_makt-matnr.
endif.
EXPORT t_mara TO MEMORY ID 'T_MARA'.
WRITE:/ 'This list is from the submitted program'.
SKIP 1.
LOOP AT t_mara.
WRITE:/ t_mara-mtart.
ENDLOOP.
Hopes this helps you.
Thanks,
Ashok. -
How to get Spool Number after submtting the program and return
Hi All,
Could you please assist me on this issue. I have ABAP program which will create a spool number and this spool number is generated by submitting the same report. Now when try to retrive the spool number from sy-spono it is displaying as 000000 but it suppose to be the spool which is created during submit program. COuld you please assist me on this issue. I have added the part of code for your reference,
DATA: l_params TYPE pri_params,
l_valid TYPE string,
w_spool_nr like sy-spono,
p_m_werks like marc-werks.
export p_werks to memory id 'P_WERKS'.
CALL FUNCTION 'GET_PRINT_PARAMETERS'
IMPORTING
out_parameters = l_params
valid = l_valid
IF sy-subrc <> 0.
ENDIF.
import p_werks from memory id 'P_WERKS'.
p_m_werks = p_werks.
SUBMIT zmmlist01 with p_werks eq p_m_werks
to SAP-SPOOL
spool parameters l_params
without spool dynpro and return.
write: sy-SPOno.
Thanks & Regards,
Nagaraj KalbaviHi,
You can use the code snippet as below :
SELECT MAX( RQIDENT ) INTO G_SPOOL_NUM
FROM TSP01
WHERE RQCLIENT = SY-MANDT AND
RQOWNER = SY-UNAME.
Also you can use the FM RSPO_FIND_SPOOL_REQUESTS' and pass the relevant parameters to this FM. This should get you the desired results.
Hope this would be of some help!!
Regards,
Lalit Kabra -
Thread to search a web page and return results
Hi, I am writing a program where the user will key in an ISBN, after the user inputs the number I want to create a thread to query a website like amazon and return the title of the book and name of the author. Any suggestions on how to accomplish this in Java? Are there any libraries available to do something like this
ThanksI would suggest you start by seeing what APIs Google and/or Amazon have to offer you. Accessing web content from a program is in many cases, against the terms of service for the site. But many popular sites have special feeds or API resources to let you access content like this.
Then at some point you'll be wanting to go through the [_Custom Networking Tutorial_|http://java.sun.com/docs/books/tutorial/networking/index.html] -
Callling an standard program and return back
Hi all,
I am coding an Zprogram in that i have to call an Standard Program ( ex:- SAPMF02K) and after executing that standard program again i have to come back and execute my remaining Zprogram .
How can i do this.
Regards
AjayHi,
Use SUBMIT AND RETURN
That is , u can do...
SUBMIT SAPMF02K AND RETURN.
Chk the following link.....
http://www.sapdevelopment.co.uk/reporting/rep_submit.htm
Regards.
Edited by: Iyswarya Godi on Jul 9, 2008 7:16 AM
Edited by: Iyswarya Godi on Jul 9, 2008 7:16 AM -
How To call a Tcode From a Program and returning back ?
Dear All,
I have a requirement, i have to show all the open orders as in the the tcode va05 and return back to the my program. so how to display the tcode and getting back to my program. please help?Hi,
Basic syntax to call the transaction is:
SET PARAMETER ID <id name> FIELD <filedname>.
CALL TRANSACTION <TCOde> AND SKIP FIRST SCREEN.
If your are using ALV then snippet is :
FORM user_command USING okcode LIKE sy-ucomm
lselfield TYPE slis_selfield.
CASE okcode.
WHEN '&IC1'. " SAP standard code for double-clicking
CASE lselfield-sel_tab_field."check if double click is only on
WHEN 'ITAB-AUFNR'."aufnr not on any other field
SET PARAMETER ID 'ANR' FIELD lselfield-value.
CALL TRANSACTION 'IW32' AND SKIP FIRST SCREEN.
ENDCASE.
ENDCASE.
Endform.
Pooja -
Call program and return with data
Hi, Experts,
I have called a program from my main program using SUBMIT
and return.
I need to get data back from called program in table format.
Is there any way to fullfill such requirement.
Regards
Rajiv singh.if the program is custom , then you can use import and export option. you can export the data to memory in the submit program, and import from memory after submit call.
if it Standard program , in some standard programs also will export data to memory , so check in inside the program. -
Execute webdynpro from abap program and return to the caller program
Guys,
I have a question here.
I know there is a way to call an abap webdynpro application from normal abap program by either using a class method, or use a function module WDY_EXECUTE_IN_PLACE by providing
the webdynpro application or using CALL TRANSACTION statement.
But, is there anyways that we can call the webdynpro application from abap program by supplying data to the webdynpro and display to the user from the portal, and then
once the user do some manipulation on the data, can we transfer back the data to the caller abap program?hey ,
you can pack any web-dynpro program in tranasaction code and run it from R/3 and not via portal :
search in " SAPTECHNICAL" how to do so - for some reason i cant post a link here
than you can use call transaction .
regards
ASA -
EXECUTE IMMEDIATE dynamic statement and return procedure value
Hello guys,
How can i return values from procedure using EXECUTE IMMEDIATE statment?
I made easy example:
CREATE OR REPLACE PACKAGE pac_test
IS
PROCEDURE pro_calc_average( p_age_1 IN NUMBER,
p_age_2 IN NUMBER,
p_age_3 IN NUMBER,
v_out OUT NUMBER);
PROCEDURE pro_calc(p_age_1 IN NUMBER,
p_age_2 IN NUMBER,
p_age_3 IN NUMBER);
END;
CREATE OR REPLACE PACKAGE BODY pac_test
IS
PROCEDURE pro_calc_average( p_age_1 IN NUMBER,
p_age_2 IN NUMBER,
p_age_3 IN NUMBER,
v_out OUT NUMBER)
IS
BEGIN
v_out:=(p_age_1+p_age_2+p_age_3)/3;
END pro_calc_average;
PROCEDURE pro_calc(p_age_1 IN NUMBER,
p_age_2 IN NUMBER,
p_age_3 IN NUMBER)
IS
x number;
v_sql varchar2(4000);
BEGIN
v_sql:='pac_test.pro_calc_average('||p_age_1||','||p_age_2||','||p_age_3||',x)';
dbms_output.put_line(v_sql);
EXECUTE IMMEDIATE v_sql;
dbms_output.put_line(' ====> '||x);
END pro_calc;
END;
-- Run procedures [Faild]
EXEC pac_test.pro_calc(2,9,19);
When i run:
DECLARE
x number;
BEGIN
pac_test.pro_calc_average(2,9,9,x);
dbms_output.put_line(' ====> '||x);
END;
It's works, but this is not what i am looking for.
Thank you guys,
Sam.Hi Sam,
Like this?
CREATE OR REPLACE PACKAGE pac_test
IS
pac_var number; /* added new*/
PROCEDURE pro_calc_average( p_age_1 IN NUMBER,
p_age_2 IN NUMBER,
p_age_3 IN NUMBER,
v_out OUT NUMBER);
PROCEDURE pro_calc(p_age_1 IN NUMBER,
p_age_2 IN NUMBER,
p_age_3 IN NUMBER);
END;
CREATE OR REPLACE PACKAGE BODY pac_test
IS
PROCEDURE pro_calc_average( p_age_1 IN NUMBER,
p_age_2 IN NUMBER,
p_age_3 IN NUMBER,
v_out OUT NUMBER)
IS
BEGIN
v_out:=(p_age_1+p_age_2+p_age_3)/3;
END pro_calc_average;
PROCEDURE pro_calc(p_age_1 IN NUMBER,
p_age_2 IN NUMBER,
p_age_3 IN NUMBER)
IS
pack_local_var number;
v_sql varchar2(4000);
BEGIN
--v_sql:='pac_test.pro_calc_average('||p_age_1||','||p_age_2||','||p_age_3||',x)';
v_sql:=' declare x number; begin pac_test.pro_calc_average('||p_age_1||','||p_age_2||','||p_age_3||',x);
dbms_output.put_line(x);
pac_test.pac_var:=x; /* added new*/
end;';
dbms_output.put_line(v_sql);
EXECUTE IMMEDIATE v_sql;
pack_local_var:=pac_var; /* added new*/
dbms_output.put_line(pack_local_var); /* added new*/
END pro_calc;
END;Declared a package variable.
But be aware this variable is accessible to everyone and they can read or change its value if they have the right privileges.
REgards,
Bhushan -
Dequeue Business event (AQ or AppsAdapter) in OSB and return results fails
I am new to OSB. The scenario is to publish out the results to SFDC (SalesForce.Com) any changes in EBS.
The Dequeueing works well within OSB. However when I am trying to return the results back.. It is failing. Is it because Dequeueing wsdl has only an input structure
and does not have an output structure?I get the following error message
BEA-382040: Failed to set the value of context variable "body". Value must be an instance of {http://schemas.xmlsoap.org/soap/envelope/}Body. So basically the input definition of the Event is
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
</soap:Header>
<soapenv:Body>
<even:WF_EVENT_T xmlns:even="http://xmlns.oracle.com/xdb/APPS/EventListener">
<!--Optional:-->
<PRIORITY>1.051732E7</PRIORITY>
<!--Optional:-->
<SEND_DATE>string</SEND_DATE>
<!--Optional:-->
<RECEIVE_DATE>string</RECEIVE_DATE>
<!--Optional:-->
<CORRELATION_ID>string</CORRELATION_ID>
<!--Optional:-->
<PARAMETER_LIST>
<!--Zero or more repetitions:-->
<PARAMETER_LIST_ITEM>
<!--Optional:-->
<NAME>string</NAME>
<!--Optional:-->
<VALUE>string</VALUE>
</PARAMETER_LIST_ITEM>
</PARAMETER_LIST>
<!--Optional:-->
<EVENT_NAME>string</EVENT_NAME>
<!--Optional:-->
<EVENT_KEY>string</EVENT_KEY>
<!--Optional:-->
<EVENT_DATA>string</EVENT_DATA>
<!--Optional:-->
<FROM_AGENT>
<!--Optional:-->
<NAME>string</NAME>
<!--Optional:-->
<SYSTEM>string</SYSTEM>
</FROM_AGENT>
<!--Optional:-->
<TO_AGENT>
<!--Optional:-->
<NAME>string</NAME>
<!--Optional:-->
<SYSTEM>string</SYSTEM>
</TO_AGENT>
<!--Optional:-->
<ERROR_SUBSCRIPTION>ZQ==</ERROR_SUBSCRIPTION>
<!--Optional:-->
<ERROR_MESSAGE>string</ERROR_MESSAGE>
<!--Optional:-->
<ERROR_STACK>string</ERROR_STACK>
</even:WF_EVENT_T>
</soapenv:Body>
</soapenv:Envelope>
and then I replace the body with
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
</soap:Header>
<soapenv:Body>
<get:GetSystemDateInput xmlns:get="http://xmlns.oracle.com/pcbpel/adapter/db/GetSystemDate"/>
</soapenv:Body>
</soapenv:Envelope>
before the call to the business service GetSystemDate and then I get this error
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<soapenv:Fault>
<faultcode>soapenv:Server</faultcode>
<faultstring>
BEA-382040: Failed to set the value of context variable "body". Value must be an instance of {http://schemas.xmlsoap.org/soap/envelope/}Body.
</faultstring>
<detail>
<con:fault xmlns:con="http://www.bea.com/wli/sb/context">
<con:errorCode>BEA-382040</con:errorCode>
<con:reason>
Failed to set the value of context variable "body". Value must be an instance of {http://schemas.xmlsoap.org/soap/envelope/}Body.
</con:reason>
<con:location>
<con:node>PipelinePairNode1</con:node>
<con:pipeline>PipelinePairNode1_request</con:pipeline>
<con:stage>stage1</con:stage>
<con:path>request-pipeline</con:path>
</con:location>
</con:fault>
</detail>
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope> -
Applet sends SQL and servlet queries and returns results to applet
So, this is what my problem is. I've tried several different ways on this so my code probably don't work at all.
Could someone post me an example on how to send the sql query from the Applet and how to pick up the data from the servlet.
Thank you,
Derek LungI suggest you to use:
* one JavaBean that handles db connections and queries;
* a Servlet that uses the JavaBean and receives a String that rappresents the query from the Applet: such String will be passed to JavaBean in order to execute the query and retrieve the data from db;
* the Applet that uses the Servlet to retrieve the results (you can store them in a structure that MUST be serializable.
Let me know if you find problems in costructing such architecture!
-- Ivan -
Procedure to take inpot data set and return result set
Hi all,
I have a situation where there will be one "standard" set of data (source_data below) and I will need to get information on results for certain groups of clients (client_data being an example). As straight SQL this would be very easy (see below) -- real world problem is a little more complicated. However, what I would like to do is set up a procedure so that I can pass it my variable client data and it will spit back out a data set the same as the output from the given SQL.
A pointer in the right direction would be appreciated. If I could "pass the client data" as a string containing a SQL query, that would be even better, e.g.
GetResults('select client_id,min(whatever_date) from some_client_data where .....',MyOutputRefCursor?)
create table source_data
(client_id integer,
tdate date,
amount number(6,2));
create table client_data
(client_id integer,
critical_date date);
insert into source_data values(1,to_date('20090104','yyyymmdd'),1000);
insert into source_data values(1,to_date('20100104','yyyymmdd'),2000);
insert into source_data values(1,to_date('20110104','yyyymmdd'),3000);
insert into source_data values(1,to_date('20120104','yyyymmdd'),4000);
insert into source_data values(2,to_date('20090104','yyyymmdd'),5000);
insert into source_data values(2,to_date('20090604','yyyymmdd'),1000);
insert into source_data values(2,to_date('20100104','yyyymmdd'),2000);
insert into source_data values(3,to_date('20091004','yyyymmdd'),3000);
insert into source_data values(3,to_date('20091104','yyyymmdd'),4000);
insert into source_data values(4,to_date('20090104','yyyymmdd'),5000);
insert into source_data values(4,to_date('20090604','yyyymmdd'),2000);
insert into client_data values(1,to_date('20110104','yyyymmdd'));
insert into client_data values(2,to_date('20090604','yyyymmdd'));
select c.client_id,
sum(CASE WHEN tdate < critical_date then amount else null end) used_before,
sum(CASE WHEN tdate >= critical_date then amount else null end) used_after
from source_data s
inner join client_data c on s.client_id = c.client_id
GROUP BY c.client_id;Thanks,
JonJonWat wrote:
I have a situation where there will be one "standard" set of data (source_data below) and I will need to get information on results for certain groups of clients > (client_data being an example). As straight SQL this would be very easy (see below) -- real world problem is a little more complicated. Can you give a more accurate representation of the real world problem?
A pointer in the right direction would be appreciated. If I could "pass the client data" as a string containing a SQL query, that would be even better, e.g.Passing a query as as string for execution is rarely the correct approach. This approach won't scale and most likely will result in maintenance and security problems.
If you can update your post to have a more accurate representation of the problem you are trying to solve you'll probably get an acceptable answer. Other than that all I can suggest is that you need to rethink the approach a bit. For example, if you know you need to filter out a set of data to join to your SOURCE_DATA table, why couldn't you do that inside the procedure?
SELECT c.client_id
, SUM
( CASE
WHEN tdate < critical_date
THEN amount
END
) AS used_before
, SUM
( CASE
WHEN tdate >= critical_date
THEN amount
END
) AS used_after
FROM source_data s
JOIN ( SELECT client_id
, MIN(<date column>) AS critical_date
FROM client_data
WHERE <where clause>
GROUP BY client_id
) c on s.client_id = c.client_id
GROUP BY c.client_id; -
Create a DAQ program and display results on with waveform and spreadsheet
I need help creating a DAQ program that will read digital and analog channels and display on a continuous waveform, and then display readings on a spreadsheet
You definitely want to start with the example programs. There are many of them which ship with LabVIEW and even more on NI's Example Programs Library (http://www.ni.com/devzone/libraries/default.htm). Also, if you are wanting to use an Excel spreadsheet, I would suggest getting the Report Generation Toolkit for Microsoft Office. It simplifies your coding immensely and will save you a lot of time.
J.R. Allen -
Hello,
I am trying to make stored procedure in what i am getting i_group_id as a list of groups seprated by semicoln like 1,2,14,17,23.
And i want list of emails based on that group. And result set will be as a list of emails seprated by semicolon.
If you know how to install that in stored procedure please help me. Appreciate your help.
Thanks.
PROCEDURE get_groups_email(i_group_id IN VARCHAR2,
x_group_email_dtl_cur OUT resultcur)
IS
x_group_email VARCHAR2(4000):=NULL;
BEGIN
FOR i IN (SELECT TRIM(emp.email) email
FROM ems.employee emp,
ems.groups_employee egrp
WHERE egrp.group_id IN (i_group_id)
AND emp.person_id = egrp.person_id) LOOP
x_group_email:= x_group_email || i.email ||';';
END LOOP;
x_group_email := RTRIM(x_group_email,';');
OPEN x_group_email_dtl_cur FOR
SELECT x_group_email
FROM DUAL;
DBMS_OUTPUT.PUT_LINE('x_group_email:' || x_group_email);
END get_groups_email;
PROCEDURE get_groups_email(i_group_id IN VARCHAR2,
x_group_email_dtl_cur OUT resultcur)
IS
x_group_email VARCHAR2(4000):=NULL;
BEGIN
FOR i IN (SELECT TRIM(emp.email) email
FROM ems.employee emp,
ems.groups_employee egrp
WHERE egrp.group_id IN (i_group_id)
AND emp.person_id = egrp.person_id) LOOP
x_group_email:= x_group_email || i.email ||';';
END LOOP;
x_group_email := RTRIM(x_group_email,';');
OPEN x_group_email_dtl_cur FOR
SELECT x_group_email
FROM DUAL;
DBMS_OUTPUT.PUT_LINE('x_group_email:' || x_group_email);
END get_groups_email;1013527 wrote:
I am using Oracle 9.7.2. Not 11g.
No Database at hand to provide a working example.
So use http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:73830657104020 to split your list into rows.
Join that to your table of e-mail addresses
then take a look at http://www.sqlsnippets.com/en/topic-11787.html maybe chosing http://www.sqlsnippets.com/en/topic-12087.html
and you're done.
Regards
Etbin
something to play with (still NOT TESTED!)
with
e_mails as
(select 1 user_id,'alpha' || chr(64) || 'domain.eu' e_mail from dual union all
select 2,'beta' || chr(64) || 'domain.eu' from dual union all
select 3,'gamma' || chr(64) || 'domain.eu' from dual union all
select 4,'delta' || chr(64) || 'domain.eu' from dual union all
select 5,'epsilon' || chr(64) || 'domain.eu' from dual union all
select 6,'zeta' || chr(64) || 'domain.eu' from dual union all
select 7,'eta' || chr(64) || 'domain.eu' from dual union all
select 8,'theta' || chr(64) || 'domain.eu' from dual union all
select 9,'iota' || chr(64) || 'domain.eu' from dual union all
select 10,'kappa' || chr(64) || 'domain.eu' from dual union all
select 11,'lambda' || chr(64) || 'domain.eu' from dual union all
select 12,'mu' || chr(64) || 'domain.eu' from dual union all
select 13,'nu' || chr(64) || 'domain.eu' from dual union all
select 14,'xi' || chr(64) || 'domain.eu' from dual union all
select 15,'omicron' || chr(64) || 'domain.eu' from dual union all
select 16,'pi' || chr(64) || 'domain.eu' from dual union all
select 17,'rho' || chr(64) || 'domain.eu' from dual union all
select 18,'sigma' || chr(64) || 'domain.eu' from dual union all
select 19,'tau' || chr(64) || 'domain.eu' from dual union all
select 20,'upsilon' || chr(64) || 'domain.eu' from dual union all
select 21,'phi' || chr(64) || 'domain.eu' from dual union all
select 22,'chi' || chr(64) || 'domain.eu' from dual union all
select 23,'psi' || chr(64) || 'domain.eu' from dual union all
select 24,'omega' || chr(64) || 'domain.eu' from dual
groups as
(select 1 g_id,'1,15,21,17' members from dual union all
select 2,'23,10,3,20,7,23,15,9' from dual union all
select 3,'3,4,5,6,7,8' from dual union all
select 4,'23,24,15,16,7,18' from dual
select g_id,
substr(sys_connect_by_path(e_mail,';'),2) e_mail_list
from (select g.g_id,
e.e_mail,
row_number() over (partition by g.g_id order by e.user_id) rn
from e_mails e,
groups g
where instr(','||g.members||',',','||to_char(e.user_id)||',') > 0
and instr(','||:group_list||',',','||to_char(g.g_id)||',') > 0
where connect_by_isleaf = 1
start with rn = 1
connect by rn = prior rn + 1
and g_id = prior g_id
Message was edited by: Etbin provided a small example
Maybe you are looking for
-
I have a passport 0740 it shows up on my device manger
I need help.I have a passport 0740 its shows up in the device msger and states that its workin property but when i goto volumes and click populate. all the data comes back blank. could it be broken? it doesnt show up in my computer, nor does it have
-
I cant sign my initials in acrobat what should i do?
i have a form that i have to sign but i cant put initials in the blocks what should i do
-
i want to know whats the release of jdeveloper compatible with Oracle E-Business Suite 12.1.3
-
Importing Song From iCloud Drive to GB IOS
I have been saving my GB ios songs to icloud, consequently my iPad is getting full (32gb). Now that my song is in iCloud Drive may I delete the song from my iPad and if needed later import it back to my iPad? If so, what is the procedure? Thanks.
-
Field alignment gets locked to top-left for last field on subform
Periodically I experience a problem with the last field on a subform. Whatever field alignment I set using Output Designer, when central pro processes the data the and aligns the data topleft. This is a particular problem when outputing financial dat