RFC call from MSSQL 2000 stored procedure
Hi. I need call SAP RFC transaction from stored procedure of MS SQL Server 2000.
When i'm execute example from T-SQL Help it's work perfect
Examples
A. Use Prog ID
This example creates a SQL-DMO SQLServer object by using its ProgID.
DECLARE @object int
DECLARE @hr int
DECLARE @src varchar(255), @desc varchar(255)
EXEC @hr = sp_OACreate 'SQLDMO.SQLServer', @object OUT
IF @hr <> 0
BEGIN
EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT
SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
RETURN
END
When i'm execute:
DECLARE @object int
DECLARE @hr int
DECLARE @src varchar(255), @desc varchar(255)
EXEC @hr = sp_OACreate 'SAP.Functions',
@object OUT
IF @hr <> 0
BEGIN
EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT
SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
RETURN
END
i'm recieve error:
0x800401F3
ODSOLE Extended Procedure
Wrong string with class name
BUT! This example work perfect via another way: in VBS script, in VBA macros, in Visual FoxPro program.
What wrong in MS SQL ???
Hi Vitaly Ashmarin.
Pls, Did you solve this issue?
Ty
Similar Messages
-
I have used a tool to convert my sql 2000 stored procedure to Oracle 10g PL/SQL, here is an example
SQL 2000 Stored Procedure
CREATE PROCEDURE [GetEmployees]
AS
Select * from EMPMST ORDER BY emp_name
GO
After Transformation i got 2 files, one was a procedure and other a package
CREATE OR REPLACE PACKAGE GLOBALPKG
AS
TYPE RCT1 IS REF CURSOR;
TRANCOUNT INTEGER := 0;
IDENTITY INTEGER;
END;
CREATE OR REPLACE PROCEDURE GetEmployees
RCT1 IN OUT GLOBALPKG.RCT1
AS
BEGIN
OPEN RCT1 FOR
SELECT *
FROM EMPMST
ORDER BY emp_name;
END;
When i execute the procedure GetEmployees i got this error :
SQL> execute GetEmployees;
BEGIN GetEmployees; END;
ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'GETEMPLOYEES'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
Please Help me in debugging this error. Thanks in advance.As the poster above mentioned you cannot call "GetEmployees" without a parameter.
Note that the procedure declaration has the following line
RCT1 IN OUT GLOBALPKG.RCT1
This means that whenever you want to call the procedure you must pass it a variable of type GLOBALPKG.RCT1
However unless this is merely a homework or learning exercise (i.e. you are not porting the code of a production application) i would strongly recommend that you do not attempt to simply convert the code to PL/SQL.
The reasoning behind this is that Oracle's architecture will be completely different to the source of the original code and if you attempt to simply port the code (especially using an automatic tool) you will almost certainly hit problems.
For example the SQL Server's 2000 code may (should be) be written based on SQL Server's locking strategy. Oracle's locking strategy is completly different if you try to use the same techniques as you do in SQL Server the performance will suffer.
Porting a code or a database schema from one platform to another involves a lot of analysis in order to take advantage of the features of the destination platform.
As I said this may not be important to you depending on why you are attempting a port.
Good Luck. -
Can you make an SSL (https) call from a Java Stored Procedure?
I have loaded a bunch of java classes. Ultimately, one of my routines makes an
https call to another machine (https://machine:443/foo?xml...). I am receiving
the following error message:
SSL implementation not available
I read
http://metalink.oracle.com/metalink/plsql/ml2_documents.showDocument?p_database_
id=NOT&p_id=103051.1
Which states
3.17.6 You can not do SSL callouts from within 8i to other CORBA or EJBs. This
also means that you can not callback with an SSL connection a CORBA object
running in an 8i client.
Does this mean that I can't do what I am trying to do from within 8.1.7?
If there is any way to do this, I would really appreciate the advice. I need
to call this Java API from a pl/sql routine, and it has to be via SSL. I would
prefer to load all the Java into the database and avoid an exproc call.Anton/Joe,
Yes, you can do this, but it might not be straightforward based on the version of Oracle you have. I've noticed there's a higher chance of getting this to work with 8.1.7 or higher (otherwise, you may need to load more classes, etc.). Mark Piermarini posted a nice example in a previous thread in this group:
http://osi.oracle.com/~mbpierma/SSL_Java_DB.html
Basically, he connected to UPS to get package tracking info.
Hope this helps,
-Dan
http://www.compuware.com/products/devpartner/db/oracle_debug.htm
Debug PL/SQL and Java in the Oracle Database -
Calling a URL from a Java Stored Procedure
Hi,
I'm trying to call a URL from a Java Stored Procedure in Oracle 8.1.7(Windows 2000). The ultimate goal is to call this stored procedure from a database trigger. The status of the object remains invalid in the database even after compilation and publishing without any errors. The code follows. Any suggestions/alternatives to accomplish this would be appreciated.
Java Stored Procedure:
CREATE OR REPLACE JAVA SOURCE NAMED "UPDATEATTR" AS
import java.net.*;
import java.util.*;
import java.io.*;
public class UpdateAttr {
public static String testmain() {
ObjectInputStream is;
URL url;
String uri =
"http://www.yahoo.com";
try {
//calling the URL
url = new URL(uri);
URLConnection yahooConnection = yahoo.openConnection();
} catch (Exception e) {
e.printStackTrace(System.err);
return "TEST_SUCCESSFUL";
Code to Publish it:
CREATE OR REPLACE FUNCTION setNewAttributes return VARCHAR2
AS LANGUAGE JAVA NAME
'UpdateAttr.testmain() return String';
Thanks in advance.
RisSmall mistake in the previous post. The object still has a status of "INVALID" though. The Java stored procedure should actually read:
Java Stored Procedure:
CREATE OR REPLACE JAVA SOURCE NAMED "UPDATEATTR" AS
import java.net.*;
import java.util.*;
import java.io.*;
public class UpdateAttr {
public static String testmain() {
ObjectInputStream is;
URL url;
String uri =
"http://www.yahoo.com";
try {
//calling the URL
URL yahoo = new URL(uri);
URLConnection yahooConnection = yahoo.openConnection();
} catch (Exception e) {
e.printStackTrace(System.err);
return "TEST_SUCCESSFUL";
Code to Publish it:
CREATE OR REPLACE FUNCTION setNewAttributes return
VARCHAR2
AS LANGUAGE JAVA NAME
'UpdateAttr.testmain() return String';
/ -
How to call PL-SQL script/stored procedure from Java?
Assume I want to call a PL-SQL stored procedure from external Java program.
How can I do this?
Is there a simple "Hello world" example for this?
PeterThis forum is for Oracle only not for java
Ug -
How to call PL-SQL script/stored procedure from BPEL?
Assume I want to call a PL-SQL stored procedure from BPEL.
How can I do this?
Is there a simple "Hello world" example for this?
PeterThe database adapter supports calling stored procedures. There is an example called "File2StoredProcedure" that you can use as a reference to get started.
-
Problem while calling webservice from a plsql stored procedure
Hi everybody,
I need to call a webservice from a plsql stored procedure.
I was following documentation published in the otn at the following link.
"http://www.oracle.com/technology/tech/webservices/htdocs/samples/dbwebservice/DBWebServices_PLSQL.html"
I am encountering the following error on my sql prompt-
SQL> exec dbms_output.put_line(time_service.get_local_time('94065'));
BEGIN dbms_output.put_line(time_service.get_local_time('94065')); END;
ERROR at line 1:
ORA-29273: HTTP request failed
ORA-06512: at "SYS.UTL_HTTP", line 1022
ORA-12545: Connect failed because target host or object does not exist
ORA-06512: at "APPS.DEMO_SOAP", line 65
ORA-06512: at "APPS.TIME_SERVICE", line 13
ORA-06512: at line 1
Has anybody worked on the same example. Please direct me.
Thanks & Regards
Kiran KumarKiran, were you able to solve this?
I am facing the same error.
Oracle Server is Unix and webservice is .NET.
I am able to connect to Java web service. -
How to call a sql server stored procedure from oracle
Hi all,
Please anybody tell me how to call a sql server stored procedure from oracle.
I've made an hsodbc connection and i can do insert, update, fetch data in sql server from oracle. But calling SP gives error. when I tried an SP at oracle that has line like
"dbo"."CreateReceipt"@hsa
where CreateReceipt is the SP of sql server and hsa is the DSN, it gives the error that "dbo"."CreateReceipt" should be declared.
my database version is 10g
Please help me how can i call it... I need to pass some parameters too to the SP
thanking youhi,
thank you for the response.
when i call the sp using DBMS_HS_PASSTHROUGH, without parameters it works successfully, but with parameters it gives the following error
ORA-28500: connection from ORACLE to a non-Oracle system returned this message:
[Generic Connectivity Using ODBC][Microsoft][ODBC SQL Server Driver]Invalid parameter number[Microsoft][ODBC SQL Server Driver]Invalid Descriptor Index (SQL State: S1093; SQL Code: 0)
my code is,
declare
c INTEGER;
nr INTEGER;
begin
c := DBMS_HS_PASSTHROUGH.OPEN_CURSOR@hsa;
DBMS_HS_PASSTHROUGH.PARSE@hsa(c, 'Create_Receipt(?,?)');
DBMS_HS_PASSTHROUGH.BIND_VARIABLE@hsa(c,1,'abc');
DBMS_HS_PASSTHROUGH.BIND_VARIABLE@hsa(c,2,'xyz');
nr:=DBMS_HS_PASSTHROUGH.EXECUTE_NON_QUERY@hsa(c);
DBMS_HS_PASSTHROUGH.CLOSE_CURSOR@hsa(c);
end;
Create_Receipt is the sp which requires two parameters.
please give me a solution
thanking you
sreejith -
Calling a servlet from a Java Stored Procedure
Hey,
I'm trying to call a servlet from a Java Stored Procedure and I get an error.
When I try to call the JSP-class from a main-method, everything works perfectly.
Java Stored Procedure:
public static void callServlet() {
try {
String servletURL = "http://127.0.0.1:7001/servletname";
URL url = new URL(servletURL);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setDoOutput(true);
conn.setRequestProperty("Pragma", "no-cache");
conn.connect();
ObjectInputStream ois = new ObjectInputStream(conn.getInputStream());
Integer client = (Integer)ois.readObject();
ois.close();
System.out.println(client);
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
Servlet:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Integer id = new Integer(10);
OutputStream os = response.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(os);
oos.writeObject(id);
oos.flush();
oos.close();
response.setStatus(0);
Grant:
call dbms_java.grant_permission( 'JAVA_USER', 'SYS:java.net.SocketPermission','localhost', 'resolve');
call dbms_java.grant_permission( 'JAVA_USER','SYS:java.net.SocketPermission', '127.0.0.1:7001', 'connect,resolve');
Package:
CREATE OR REPLACE PACKAGE pck_jsp AS
PROCEDURE callServlet();
END pck_jsp;
CREATE OR REPLACE PACKAGE BODY pck_jsp AS
PROCEDURE callServlet()
AS LANGUAGE JAVA
NAME 'JSP.callServlet()';
END pck_jsp;
Architecture:
AS: BEA WebLogic 8.1.2
DB: Oracle 9i DB 2.0.4
Exception:
java.io.StreamCorruptedException: InputStream does not contain a serialized object
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java)
The Servlet and the class work together perfectly, only when I make the call from
within the database things go wrong.
Can anybody help me.
Thank in advance,
Bart Laeremans
... Desperately seeking knowledge ...Look at HttpCallout.java in the following code sample
http://www.oracle.com/technology/sample_code/tech/java/jsp/samples/jwcache/Readme.html
Kuassi -
HELP!!! Problem of Calling external Web Service from a Java Stored Procedur
1.I read the topic on http://www.oracle.com/technology/sample_code/tech/java/jsp/samples/wsclient/Readme.html about Calling external Web Service from a Java Stored Procedur.
2.After I import .jar to Oracle what is required by the topic,som error occued.
Like: ORA-29521: javax/activation/ActivationDataFlavor class not found,
ORA-29545: badly formed class.
3.These is not enough .jar required on the topic? What can I do for ORA-29545: badly formed class?
Thany you!Try this
Re: HELP! Loading Java Classes into Oracle ERROR -
Calling JPA from a Java Stored Procedure
Is it possible to call JPA from a java stored procedure? If so, does anyone have example? How do you setup the persistence.xml?
How does the peformance compare with straight JDBC in a java stored procedure?
Thanks for any help!
JohnnyHi Johnny:
Basically you can run any JDK 1.5 framework inside your Oracle 11g JVM, I have experience integrating Lucene IR library as a new [Domain Index for Oracle 11g/10g|http://docs.google.com/View?id=ddgw7sjp_54fgj9kg] .
I am not familiar with JPA internals but my advice is howto handle the connection inside the OJVM and the configuration files.
Some time ago I took a look to SpringFramework integration and I found that writing a new ApplicationContext class which handles the loading of beans.xml from XMLDB repository instead a file should be enough to work.
Another important point is the life cycle of the [Oracle internal JVM|http://download.oracle.com/docs/cd/E11882_01/java.112/e10588/chtwo.htm#BABHGJFI]. Unlike an standard JVM the OJVM is created once you first connect from the middle tier at OCI level and remains in execution during the connection pool existence.
I mean, if you connect using a JDBC pool the JVM will remains running across multiple soft open/close connections of your middle tier application. This is good because you can read your persistence.xml file using a Singleton class and this expensive operation will be re-used by multiple open/close operation done from the middle tier.
I suggest you do a simple Proof of Concept with a Hello World application and check if it works.
Remember that any security issues will be notified to the .trc files, security issues are related to the strong security layer configured by default inside the OJVM, for example you can not read any files from the OS file system without an specific grant, you need another grant to access to the class loader and so on, but you can simply grant this specific needs to a database role and then grant this role to the user which connect to the OJVM.
Another important point is related to the [End-of-Call Optimization|http://download.oracle.com/docs/cd/E11882_01/java.112/e10588/chtwo.htm#BABIFAAI] this can be useful if you want to perform some clean up in your Singleton class at the level of per-statement execution.
Best regards, Marcelo -
Call a UNIX shell script from an oracle stored procedure
We need to call a UNIX shell script from an oracle stored procedure
i.e. the control should come back to the procedure once the script completes. Can any body help to achieve this ?There are various ways in achieving this.
For Example, you can call a PRO*C-Library residing on the database server.
This requires a PL/SQL library to be generated and some changes to the Listener configuration.
It is also possible to implement a java procedure on the database being invoked by a PL/SQL wrapper class.
In this way (and if used right) there is also granularity regarding the filestructure permissions given and it may be called during a Forms or other PL/SQL session.
The article below explains a more generic approach how to invoke shell commands from within an Oracle Instance.
Be careful with this, because it really works ;)
Refer to :
http://www.oracle-base.com/articles/8i/ShellCommandsFromPLSQL.php
Message was edited by:
user434854 -
Moving a system from MSSQL 2000 to MSSQL 2000 IA64
Hi
We have a R/3 Enterprise 47x110 system running on MSSQL 2000/windows 32 bit. We want to change our hardware to 64 bit. According to platform availability matrix, we have to use mssql 2000 ia64/win2003 ia64 with this release. We want to know which procedure has to be used for moving a system from mssql 2000 32 bit to mssql 2000 ia64?Hello
Migrating an SAP system from Windows SQL IA32 to Windows SQL IA64 is a fairly simple procedure.
I have performed this migration myself several times.
You need to ensure that your source system (IA32) has the required support pack levels for SQL 2005
I recommend you review 905634, 151603 and 683447.
I would strongly recommend that you move directly to SQL 2005 rather than SQL 2000. SQL 2005 is fully supported and offers a lot of performance and administration features (such as snapshots).
SQL Data files are compatible between SQL platforms. By this I mean if you do an sp_detach on an SQL IA32 system you can sp_attach them to an SQL IA64 system without any special action. The files are also compatible between SQL versions, you can detach from SQL 2000 and attach to SQL 2005. This is described in section III of 799058.
In your case I would:
1. Make sure you support packs are up to date on source system
2. Make sure you are using the correct collation 600027
3. Install 4.7 on your IA64 host from the install CDs
4. Update your IA64 system kernel to the correct level
5. Detach the "empty" DB from the IA64 host
6. Shutdown your IA32 system, stop SQL, start SQL and then stop SQL
7. Copy the datafiles and log files to the IA64 system
8. Attach them to your IA64 SQL 2005 system
9. Run the SQL Tools utility
10. Start up your 4.7 instance
11. Check SM21, ST04, SICK and DB02
12. Reschedule your backups and DBCC
This procedure should work and should be quite simple to implement. You can leave you IA32 system untouched, so if you experience any problems you have a fall back position (ie. just restart your IA32 system - nothing has changed on you IA32 system or its database).
I recommend you obtain the official SAP SQL 2005 CD, it includes SP1 and has a useful script call SQL4SAP.VBS that sets a lot of options for you automatically.
Check 879941 - you may need to adjust the torn page setting and auto_update_statistics_async settings or you will get red alerts in your CCMS tree.
For other people out there who use Java systems (EP, XI etc) you <b>will almost certainly</b> have to update your JDBC drivers. See note 639702.
Hope this helps, let me know if you have any questions.
Goodluck
Message was edited by: Sam Badan -
Using XI - RFC table and an Oracle stored procedure that returns a cursor.
I need to create an interface using XI between an RFC table and an Oracle stored procedure that returns a cursor. We are on oarcle 9.2 and SP12.
My stored procedure looks something like this:
CREATE OR REPLACE
PROCEDURE testproc_xi2 (p_recordset1 OUT SYS_REFCURSOR,
in_quoteid IN varchar2 )
AS
BEGIN
OPEN p_recordset1 FOR
SELECT q.quote_id,
q.modified_by,
q.quote_status,
q.total_cost
FROM quote q
WHERE q.quote_id = in_quoteid
AND q.total_cost > 0 ;
END testproc_xi2 ;
My RFC has table and one import parameter .
I wanted to know how to create the data type for the ref cursor? and also for the table type in the RFC?
CAN XI handle multi rows coming from a Stored procedure? Are there any other alternative methods if this is not supported?Any pointers to this would be helpful.
I have called a Oracle SP from an RFC before, but that interface had one input parameter going to the stored procedure from the RFC and about 6 o/p parameters coming from the Stored procedure. This works fine.
Thanks for the help.
MalaMala,
i dont think there is anything called an rfc table...RFC stands for remote function call. That in essence would imply you need a rfc to jdbc connection.
yes XI can handle multiple rows cooming from the the stored procedure if you have them mapped appropriately.
Now as to how to create the data type within xi , you need to know what fields are going to be returned and whether they are nested and then just create them as you would for an xml
for ex
<Details>
<FirstName>
<LastName>
</Details>
that in xi would be smthing like
Details type of data occurence
FirstName type of data occurence
LastName type of data occurence.
Hope that helps.
If it does dont forget the points..:-) -
Creating a table/view or temporary table from within a stored procedure
Hi Gurus,
Can someone tell me if it is possible to create a table (or view) from within a stored procedure.
PROBLEM:
In fact I need to create a report at back end (without using oracle developer forms or reports). This report requires creating several tables to hold temporary report data. If I create a sql*plus script for this, i works fine, because it can run DDL and other sql or pl/sql statements sequencialy. But this sql*plus script cannot be called from application. So, application needs an stored procedure to do this task and then application call that procedure. But within stored procedure, i am unable to create table (or run any ddl statement). Can somebody help me in this?
Thanks in Advance.Denis,
The problem with Nicholas' suggestion isrelated to the fact that now you have two components
(a table and a stored procedure)
I don't see any problem to have "two
components" here. After all, what about all others
tabes ? This is only one more, but I don't understand
why want manage less objects, that implies more code,
more maintenance, and more difficulties to debug.
Needless to say about performance...
Nicolas.The same reasons apply if you were forced to declare all PL/SQL variables publicly (outside the stored proc.) rather than privately (from inside the stored proc). Naming conflicts for one. If the name that you want to use for the GTT already exists, you need to find a new name. With the SQL Server type local/private declarations, you wouldn't have that problem.
I can see how performance would be the same or better using GTTs. If the number of records involved is low, this is likely negligable.
Maybe you are looking for
-
CF Builder 2 license is not working for the upgrade to CF Builder 3. Suggestions?
I purchased CF Builder 2 during a promotion a few years ago, and CF Builder 3 does not recognize that license number when trying to upgrade. any ideas?
-
Accessing Discoverer Viewer on a PDA
Hi, Could anyone tellme if it would be possible to access discoverer viewer on a PDA running windows mobile 2003? We have a Portal running the discoverer portlets and when I click "Analyze" link the discoverer viewer errors with a java null pointer.
-
What is a website that can assist with getting student loans under control?
I've seen in previous post people refer others to a website that will assist you in getting your loans under control. I have multiple loans with different loan companies and I want to speak with someone to guide me through getting on the right track?
-
HT4864 syncing computers on different OS
I have a Mac tower running lion and macbook pro running snow leopard, and i phone, ipad and ipod. i have been syncing all of my idevices on my macbook running leopard. it always asks me if i want to back up to icloud, and i say yes, but when i go t
-
New imac won't load University 365 office for mac. Keep getting error code above, any ideas on how to sort this out, have spent hours with microsft technical staff.