Calling oracle function defined within package from JPA
Hi All,
I am trying to call a function get_owner() defined under a package pkg_x_y.
But I get an error when I do
entityManager.createNativeQuery("call pkg_x_y.get_owner()");
Caused by: java.sql.SQLSyntaxErrorException: ORA-00907: missing right parenthesis
What is the correct way to execute this function?
Thanks in advance.
JPA 2.1 standardized stored procedure support, and is available within EclipseLink 2.5 as described here: http://wiki.eclipse.org/EclipseLink/Release/2.5/JPA21#Stored_Procedures
If you are unable to use JPA 2.1, you can use EclipseLink's stored procedure support as described here: http://wiki.eclipse.org/EclipseLink/Examples/JPA/StoredProcedures
The problem you are getting with your call though might be coming from within the stored proc itself, not the native query execution. Its hard to tell - are you able to execute the query on your database directly, such as through SQLPlus?
Similar Messages
-
How to get a called procedure/function name within package?
Hi folks,
is it possible to obtain a called procedure/function name within package?
For a measuring and tracing purpose, I would like to store an info at the beginning of each procedure/function in package with timestamp + additional details if needed.
For example:
CREATE OR REPLACE PACKAGE BODY "TEST_PACKAGE" IS
PROCEDURE proc_1 IS
BEGIN
api_log.trace_data(sysdate, 'START.' || ???????);
api_log.trace_data(sysdate, 'END.' || ???????);
END;
PROCEDURE proc_2 IS
BEGIN
api_log.trace_data(sysdate, 'START.' || ???????);
proc_1;
api_log.trace_data(sysdate, 'END.' || ???????);
END;
END; I would like to replace "???????" with a function which would return a name of called procedure, so result of trace data after calling TEST_PACKAGE.proc_2 would be:
11.1.2013 09:00:01 START.*TEST_PACKAGE.proc_2*
11.1.2013 09:00:01 START.*TEST_PACKAGE.proc_1*
11.1.2013 09:00:01 END.*TEST_PACKAGE.proc_1*
11.1.2013 09:00:01 END.*TEST_PACKAGE.proc_2*I tried to use "dbms_utility.format_call_stack" but it did not return the name of procedure/function.
Many thanks,
Tomas
PS: I don't want to use an hardcodingYou've posted enough to know that you need to provide your 4 digit Oracle version (result of SELECT * FROM V$VERSION).
>
is it possible to obtain a called procedure/function name within package?
For a measuring and tracing purpose, I would like to store an info at the beginning of each procedure/function in package with timestamp + additional details if needed.
>
I usually use this method
1. Create a SQL type for logging information
2. Put the package name into a constant in the package spec
3. Add a line to each procedure/function for the name.
Sample package spec
* Constants and package variables
gc_pk_name CONSTANT VARCHAR2(30) := 'PK_TEST';Sample procedure code in package
PROCEDURE P_TEST_INIT
IS
c_proc_name CONSTANT VARCHAR2(80) := 'P_TEST_INIT';
v_log_info TYPE_LOG_INFO := TYPE_LOG_INFO(gc_pk_name, c_proc_name); -- create the log type instance
BEGIN
NULL; -- code goes here
EXCEPTION
WHEN ??? THEN
v_log_info.log_code := SQLCODE; -- add info to the log type
v_log_info.log_message := SQLERRM;
v_log_info.log_time := SYSDATE;
pk_log.p_log_error(v_log_info);
raise;
END P_PK_TEST_INIT;Sample SQL type
DROP TYPE TYPE_LOG_INFO;
CREATE OR REPLACE TYPE TYPE_LOG_INFO AUTHID DEFINER AS OBJECT (
* NAME: TYPE_LOG_INFO
* PURPOSE: Holds info used by PK_LOG package to log errors.
* Using a TYPE instance keeps the procedures and functions
* independent of the logging mechanism.
* If new logging features are needed a SUB TYPE can be derived
* from this base type to add the new functionality without
* breaking any existing code.
* REVISIONS:
* Ver Date Author Description
* 1.00 mm/dd/yyyy me Initial Version.
PACKAGE_NAME VARCHAR2(80),
PROC_NAME VARCHAR2(80),
STEP_NUMBER NUMBER,
LOG_LEVEL VARCHAR2(10),
LOG_CODE NUMBER,
LOG_MESSAGE VARCHAR2(1024),
LOG_TIME TIMESTAMP,
CONSTRUCTOR FUNCTION type_log_info (p_package_name IN VARCHAR2 DEFAULT 'Uninitialized',
p_proc_name IN VARCHAR2 DEFAULT 'Uninitialized',
p_step_number IN NUMBER DEFAULT 1,
p_LOG_level IN VARCHAR2 DEFAULT 'Uninit',
p_LOG_code IN NUMBER DEFAULT -1,
p_LOG_message IN VARCHAR2 DEFAULT 'Uninitialized',
p_LOG_time IN DATE DEFAULT SYSDATE)
RETURN SELF AS RESULT
) NOT FINAL;
DROP TYPE BODY TYPE_LOG_INFO;
CREATE OR REPLACE TYPE BODY TYPE_LOG_INFO IS
CONSTRUCTOR FUNCTION type_log_info (p_package_name IN VARCHAR2 DEFAULT 'Uninitialized',
p_proc_name IN VARCHAR2 DEFAULT 'Uninitialized',
p_step_number IN NUMBER DEFAULT 1,
p_LOG_level IN VARCHAR2 DEFAULT 'Uninit',
p_LOG_code IN NUMBER DEFAULT -1,
p_LOG_message IN VARCHAR2 DEFAULT 'Uninitialized',
p_LOG_time IN DATE DEFAULT SYSDATE)
RETURN SELF AS RESULT IS
BEGIN
self.package_name := p_package_name;
self.proc_name := p_proc_name;
self.step_number := p_step_number;
self.LOG_level := p_LOG_level;
self.LOG_code := p_LOG_code;
self.LOG_message := p_LOG_message;
self.LOG_time := p_LOG_time;
RETURN;
END;
END;
SHO ERREdited by: rp0428 on Jan 11, 2013 10:35 AM after 1st cup of coffee ;) -
Call a function inside a package from a stored procedure
Hello:
I am kind of new to the stored procedure. Does anyone know how to call a function inside a package from another stored procedure?
I have a existing function (func_b) inside a package (pack_a) and it returns a cursor. I want to call this function from a stored procedure (proc_c) so that I use the data inside the cursor.
can I do the following in proc_c:
my_cursor1 SYS_REFCURSOR;
begin
my_cursor1 := exec pack_a.func_b
end
It will be very helpful if anyone can point me to any reading or example. Thank you very much for your information.guys:
Thank you for your information so far. I need some more help here. I was able to run the function in my stored procedure. However, I was not able to print the result on the screen to view the cursor result, although I am using dbms_output.put_line statement inside my stored procedure.
I use the following statement to execute my stored procedure on sql*plus. I can tell the stored procedure is executed successfully, but I did see anything printed:
DECLARE TEMP VARCHAR2(100);
BEGIN PROC_LAWS_CAD_NAME_SEARCH('LPD', 'TEST DEVICE ID', 'TEST LAST NAME', 'TEST FIRST NAME', 'F', '11112009', TEMP); END;
I tried to use 'set serveroutput on' and got the following error:
ERROR:
ORA-06502: PL/SQL: numeric or value error: host bind array too small
ORA-06512: at line 1
I am kind of confused now. thank you for your help.
Jack
Here is my procedure:
create or replace
PROCEDURE PROC_SEARCH
( AGENCY_ID IN VARCHAR2,
DEVICE_ID IN VARCHAR2,
L_NAME IN VARCHAR2,
F_NAME IN VARCHAR2,
SEX IN VARCHAR2,
DOB IN VARCHAR2,
CAD_NAME_SCH_RESULT_STR OUT VARCHAR2)
AS
v_agy_id varchar2(10);
v_device_id varchar2(20);
v_l_name varchar2(25);
v_f_name varchar2(15);
v_sex varchar2(1);
v_dob date;
-- this cursor is going to be used to store a list of warrant matching
-- name search criteria
cad_srch_cursor sys_refcursor;
objSrch SEARCH_RESULT_TEMP%ROWTYPE;
BEGIN
cad_srch_cursor := SEARCH_PKG.SEARCH('TESTING', 'TESTER', null, null,null, null, getPhonetic('TESTING'));
LOOP
FETCH cad_srch_cursor INTO objSrch;
EXIT WHEN cad_srch_cursor%NOTFOUND;
--insert into SEARCH_RESULT_TEMP (name_last) values (objSrch.name_last);
CAD_NAME_SCH_RESULT_STR := objSrch.name_last;
dbms_output.put_line('First:'||objSrch.name_first||':Last:'||objSrch.name_last||':Middle:'||objSrch.name_middle);
end LOOP;
END PROC_LAWS_SEARCH;
----------------------------------------- -
Tricky: Calling Oracle Function in an Package with DAO over ODBC
Hello,
our customer is using Oracle 10.2.0.3 Enterprise Edition. We've to create an interface from our Microsoft Access 2000 application to the oracle system.
We want to call a Oracle Package-Function with DAO over ODBC.
We are using VBA with Microsoft Access 2000 SP3.
The ADO solution that works is:
Public Function CallSProcADO()
Dim cmd As ADODB.Command
Dim cmdWrite As ADODB.Command
Dim conn As ADODB.Connection
Dim param As ADODB.Parameter
On Error GoTo err_handler
Set conn = New ADODB.Connection
conn.Open "dsn=xxx;UID=xxx;PWD=xxx;"
Set cmdWrite = New ADODB.Command
cmdWrite.ActiveConnection = conn
cmdWrite.CommandText = "{ ? = call XXX.PACKAGENAME.FUNCTION(?,?)}"
cmdWrite.Parameters(0).Direction = adParamReturnValue
cmdWrite.Parameters(0).Type = adInteger
cmdWrite.Parameters(1).Direction = adParamInput
cmdWrite.Parameters(1).Type = adVarChar
cmdWrite.Parameters(1).Value = "C0045/2006"
cmdWrite.Parameters(2).Direction = adParamInput
cmdWrite.Parameters(2).Type = adVarChar
cmdWrite.Parameters(2).Value = "J"
cmdWrite.Execute
conn.Close
MsgBox "Successfull!"
Exit Function
err_handler:
MsgBox "Error!"
End Function
Now we want to know if it's possible to use DAO to do the same.
best regards
ArndtDuring binding, strings are generally skipped. As such, you should first try replacing XMLType('?') with XMLType(?). You don't need to specify '?' because the system knows the proper type from your SQLBindParameter call.
Also, you should try replacing:
sr = SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, 0, 0,(SQLPOINTER)3, 0, &type[2]);
with
sr = SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, 0, 0,(SQLPOINTER)buf, BUFSIZE, &type[2]); -
JAVA Calling Oracle Function and Returning OBJECT
HI,
I am working as a developer in java/j2ee project.
I am facing one issue:
I need to call Oracle function from java code. Oracle User define function is residing in oracle package and returning Object which contains data.
Can you please help me
With Best Regardsgolduniya wrote:
I need to call Oracle function from java code. Oracle User define function is residing in oracle package and returning Object which contains data.
Can you please help meIt requires a great deal of Oracle jdbc driver specific code.
[http://download-west.oracle.com/docs/cd/B10501_01/java.920/a96654/oraint.htm#1012664] -
Can I call a function in another package?
Dear all,
Can I call a function in another package?
Say I have package A, and package B.
Is it possible for me to call a function in inside package A, within a function inside package B?
If yes, what's the syntax.
Thanks in advance!The variable in the calling package that will receive the value of the function in the other package needs to be defined based on that type in the other package directly:
sql>create or replace package pkg_a
2 is
3 type testTable is table of varchar2(10) index by binary_integer;
4
5 function f_a return testTable;
6 end;
7 /
Package created.
sql>create or replace package body pkg_a
2 is
3 function f_a
4 return testTable
5 is
6 v_table testTable;
7 begin
8 v_table(1) := 'One';
9 v_table(2) := 'Two';
10 return v_table;
11 end;
12 end;
13 /
Package body created.
sql>create or replace package pkg_b
2 is
3 procedure p_b;
4 end;
5 /
Package created.
sql>create or replace package body pkg_b
2 is
3 procedure p_b
4 is
5 v_table pkg_a.testTable; -- this variable has to be based on the type in pkg_a
6 begin
7 v_table := pkg_a.f_a;
8 for i in 1..v_table.count loop
9 dbms_output.put_line( v_table(i) );
10 end loop;
11 end;
12 end;
13 /
Package body created.
sql>exec pkg_b.p_b
One
Two
PL/SQL procedure successfully completed. -
Can we call a procedure defined in AM from a procedure in AM itself?
Dear Members,
I just want to know is it a oracle standard way to call a procedure defined in AM from another procedure defined in the same AM. For example
AM Code:_
public void proc1()
System.out.println("IAM IN PROCEDURE-1");
public void proc2()
proc1;
Kindly please let me know whether the above coding style is as per the standards or not.
Many thanks in advance.
Best Regards,
Arun Reddy D.Arun,
As Ravi mentioned this way of calling the method is correct.
proc1() could be reusable thats why you are calling again.
Some times few methods(procedure) is common use across the module.
In that case you can have the method in a commonAM and you extend the commonAM in all your AMs
that will help you to call in all the AM having a central place to call.
Thanks,
With regards,
Kali.
OSSI. -
Calling a function in child window from parent window
Hi,
How can I call a method in child window from parent window in adobe air using javascript. In the following example I need to call mytest() function in
child.html from parent.html file.
Thanks,
ASM
//parent.html
<HTML><HEAD>
<script>
var initOptions = new air.NativeWindowInitOptions();
initOptions.type = air.NativeWindowType.NORMAL;
initOptions.systemChrome = air.NativeWindowSystemChrome.STANDARD;
var bounds = new air.Rectangle(300, 300, 600, 500);
var html2 = air.HTMLLoader.createRootWindow(false, initOptions, false, bounds);
var urlReq2 = new air.URLRequest("child.html");
html2.load(urlReq2);
html2.stage.nativeWindow.activate();
html2.window.mytest(); //NOT WORKING
</script>
</HEAD><body></body></HTML>
// child.html
<HTML><HEAD>
<script>
function mytest()
air.trace("in child window");
</script>
</HEAD> <body></body></HTML>I suspect your problem is that the child window hasn't been created by the time you call the function in the parent.Loading the content is an asynchronous processes -- AIR doesn't stop executing your code until the window has finished loading child.html. So, you will need to add an eventlistener to html2 and call the function from there:
html2.addEventListener( "complete", onChildLoaded );
function onChildLoaded( event )
html2.window.mytest(); -
Ora-06502 while calling oracle function
I am using 9.2.0.4.0 database.
I have vb.net application that uses oracle provider for .net to connect to database.
I am calling Oracle function which returns varchar2 value back.
when i execute cmd2.ExecuteNonQuery, I get ora-06502 error.
CREATE OR REPLACE FUNCTION ZZZ_TEMP( p_val IN VARCHAR2) RETURN varchar2
AS
BEGIN
RETURN 'HELLO';
EXCEPTION WHEN OTHERS THEN
RETURN SQLCODE||' - '||SUBSTR(SQLERRM,1,100);
END;
************** vb.net code
Dim cmd2 As New Oracle.DataAccess.Client.OracleCommand(UserSchemaName & ".ZZZ_TEMP", con)
Dim VAL As String
Try
cmd2.Parameters.Add("RetVal", Oracle.DataAccess.Client.OracleDbType.Varchar2, ParameterDirection.ReturnValue)
cmd2.Parameters.Add("p_val", Oracle.DataAccess.Client.OracleDbType.Varchar2, ParameterDirection.Input).Value = "XYZ"
cmd2.Connection = con
cmd2.CommandType = CommandType.StoredProcedure
cmd2.ExecuteNonQuery()
VAL = cmd2.Parameters("RetVal").Value
Catch ex As Oracle.DataAccess.Client.OracleException
MsgBox(ex.Message)
End TryIf I change this function to retrun number rather than Varchar2 and change my
RetVal parameter as follow it works. I am noticing that there might be a bug when function returns varchar2
cmd2.Parameters.Add("RetVal", Oracle.DataAccess.Client.OracleDbType.int32, ParameterDirection.ReturnValue)
cmd2.Parameters.Add("p_Val", Oracle.DataAccess.Client.OracleDbType.int32, ParameterDirection.Input).valu ="XYZ" -
How to call a function defined inside a module loader
I wanna know...the method of calling a function defined
inside a module loader component?
Th
<mx:ViewStack id="myViewStack" >
<mx:Canvas id="Mgmt1">
<mx:Label text="Gopher"/>
</mx:Canvas>
<mx:Canvas id="Mgmt2" >
<mx:Label id="gopherlbl" top="-2" left="0"
height="40"/>
<CustomComp:MgmtGrid id="ManageCom"/>
</mx:Canvas>
<mx:Canvas id="Admin">
<mx:ModuleLoader id="adminModule" url="{adminModUrl}"
width="100%" height="100%" />
</mx:Canvas>
where adminModUrl="admin.swf";
Thru the MangeCom id reference,I am able to call the fucntion
defined inisde the CustomComponent File MgmtGrid...But I am unable
to call the funciton defined inside adminModule
ModuleLoader...(using id reference).Anyone pls suggest a solution
for this..Ensure the module is loaded before calling the method in
particular if you are calling it at the initialization of your
app. -
Calling ORACLE Functions from within CF Builder report
Hi, I have an ORACLE function that I would like to call from within my CF REPORT.
I know there is a section in the report builder where you can write coldfusion code to perform tasks, but I would rather simply call the ORACLE function for each detail row in the report
I do not want to call this function from within my main ORACLE query that I use for the report, so please don't suggest that.
Thanks so much.
-Jim6.0.5 is not certified against 10g database, so I suggest to upgrade to 6.0.8.26 (6i patch 17) first to see if the problem is gone.
-
How to call oracle function from ejb3
i'm trying to call an oracle query-function from ejb3.
The oracle function:
create or replace FUNCTION getSecThreadCount(secId in NUMBER,avai in NUMBER)
RETURN SYS_REFCURSOR is cur SYS_REFCURSOR;
m_sql VARCHAR2(250);
BEGIN
m_sql:='select count(thrId) from thread where secId='|| secid||'
and thrAvai='|| avai;
open cur for m_sql;
return cur;
END;
I'v tried several ways to call it,but all failed:
1. the calling code:
public Object getSectionThreadCount(int secId,int avai){
Query query=manager.createNativeQuery("{call getSecThreadCount(?,?) }");
query.setParameter(1, secId);
query.setParameter(2, avai);
return query.getSingleResult();
but i got the exception:
Exception in thread "main" javax.ejb.EJBException: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute query; nested exception is: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute query
javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute query
Caused by: java.sql.SQLException: ORA-06550: row 1, col 7:
PLS-00221: 'GETSECTHREADCOUNT' not procedure or not defined
ORA-06550: row 1, col 7:
PL/SQL: Statement ignored
2. the calling code:
@SqlResultSetMapping(name = "getSecThreadCount_Mapping")
@NamedNativeQuery(name = "getSecThreadCount",
query = "{?=call getSecThreadCount(:secId,:avai)}",
resultSetMapping = "getSecThreadCount_Mapping",
hints = {@QueryHint(name = "org.hibernate.callable", value = "true"),
@QueryHint(name = "org.hibernate.readOnly", value = "true")})
public Object getSectionThreadCount(int secId,int avai){
Query query=manager.createNamedQuery("getSecThreadCount");
query.setParameter("secId", secId);
query.setParameter("avai", avai);
return query.getSingleResult();
but i run into the exception:
Exception in thread "main" javax.ejb.EJBException: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute query; nested exception is: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute query
javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute query
Caused by: java.sql.SQLException: lost in index IN or OUT parameter:: 3
By the way, i have successfully called the function from hibernate. And i use oracle 11g, JBoss5 RC1.
Could anyone tell me how to call the function from EJB3?
Thanks.Here's a working model:
package.procedure: (created in example schema scott)
CREATE OR REPLACE package body data_pkg as
type c_refcursor is ref cursor;
-- function that return all emps of a certain dept
function getEmployees ( p_deptId in number
return c_refcursor
is
l_refcursor c_refcursor;
begin
open l_refcursor
for
select e.empno as emp_id
, e.ename as emp_name
, e.job as emp_job
, e.hiredate as emp_hiredate
from emp e
where e.DEPTNO = p_deptId;
return l_refcursor;
end getEmployees;
end data_pkg;
/entity class:
package net.app.entity;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedNativeQuery;
import javax.persistence.QueryHint;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
@SuppressWarnings("serial")
@Entity
@Table (name="emp")
@SequenceGenerator(name = "EmployeeSequence", sequenceName = "emp_seq")
@NamedNativeQuery( name = "getEmpsByDeptId"
, query = "{ ? = call data_pkg.getEmployees(?)}"
, resultClass = Employee.class
, hints = { @QueryHint(name = "org.hibernate.callable", value = "true")
, @QueryHint(name = "org.hibernate.readOnly", value = "true")
public class Employee implements Serializable
@Id
@Column(name="emp_id")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "EmployeeSequence")
private int id;
@Column(name="emp_name")
private String name;
@Column(name="emp_job")
private String job;
@Column(name="emp_hiredate")
private Date hiredate;
// constructor
public Employee (){}
// getters and setters
public int getId()
return id;
etc...session bean:
package net.app.entity;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import net.app.entity.Employee;
import net.app.iface.ScottAdmin;
@Stateless
public class ScottAdminImpl implements ScottAdmin
@PersistenceContext
private EntityManager entityManager;
@SuppressWarnings("unchecked")
public List<Employee> getEmployeesByDeptId(int deptId)
ArrayList<Employee> empList;
try
Query query = entityManager.createNamedQuery("getEmpsByDeptId");
query.setParameter(1, deptId);
empList = (ArrayList<Employee>) query.getResultList();
return empList;
catch (Exception e)
e.printStackTrace(System.out);
return null;
}client:
package net.app.client;
import java.util.List;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import net.app.entity.Employee;
import net.app.iface.ScottAdmin;
public class ScottClient
public static void main(String[] args)
try
// create local interface
InitialContext ctx = new InitialContext();
ScottAdmin adminInterface = (ScottAdmin) ctx.lookup("ScottAdminImpl/remote");
// select employees by deptno
int deptno = 20;
List<Employee> empList = adminInterface.getEmployeesByDeptId(deptno);
// output
System.out.println("Listing employees:");
for (Employee emp : empList)
System.out.println(emp.getId() + ": " + emp.getName() + ", " + emp.getJob() + ", " + emp.getHiredate());
catch (NamingException e)
e.printStackTrace(System.out);
}Basically you just ignore the refcursor outbound parameter.
This is a stored function, have yet to try outbound refcursor parameters in stored procedures...
Edited by: _Locutus on Apr 2, 2009 2:37 PM -
Calling functions in a package from jdbc
I am trying to call a function in a PL/SQL package from a java program using JDBC. Is this a valid option? The statement I am using is the following:
stProc = myconnect.prepareCall ("{? = call process_monitor_pkg.open_sod_cursor}");
I am receiving the following error message:
Errorjava.sql.SQLException: ORA-06576: not a function or procedure
I have verified that the function/package is defined and that I have the correct output parameter registered.
Any help would be greatly appreciated.try this :
stProc = myconnect.prepareCall (
"{ ? = call process_monitor_pkg.open_sod_cursor() }");
You have to put parenthesis even if there's no parameters... -
Call Oracle Function from ASP++++!
I have a lot of Oracle function in packages and i would like use it in my ASP pages.
With Oracle procedure it's all right.
Sample like this
set cn = Server.CreateObject("ADODB.Connection")
connString = "Provider=MSDAORA.1;Data Source=<>;User ID=<>;Password=<>"
cn.Open connString
SQL = "{call test.test_asp({resultset 0, cResult})}"
Set cmd = Server.CreateObject ("ADODB.Command")
Set cmd.ActiveConnection = cn
cmd.CommandText = SQL
cmd.CommandType = 1 'adCmdText
Set rs = Server.CreateObject ("ADODB.RecordSet")
Set rs = cmd.Execute
If NOT (rs.BOF and rs.EOF) Then
Do while NOT rs.EOF
<%=rs("dfcountry")%>
<%=rs("dfname")%>
rs.MoveNext
LOOP
End if
And in package TEST i have
PROCEDURE TEST_ASP(cResult IN OUT ResultCursor)
IS
BEGIN
OPEN cResult FOR
SELECT *
FROM tcountry;
END TEST_ASP;"
I Hope You help me with similar call a function!!!
For example, this is one
FUNCTION test_fun
RETURN resultcursor
IS
vres resultcursor;
BEGIN
OPEN vres FOR
SELECT *
FROM tcountry;
RETURN vres;
END test_fun;Stored Procedures
When executing an Oracle PL/SQL stored procedure using a command, use Oracle native syntax or the ODBC procedure call escape sequence in the command text:
Oracle native syntax: BEGIN credit_account(123, 40); END;
ODBC syntax: {CALL credit_account(123, 40)}
Preparing Commands
OraOLEDB validates and fetches the metadata only for SELECT SQL statements.
Command Parameters
When using Oracle ANSI SQL, parameters in the command text are preceded by a colon. In ODBC SQL, parameters are indicated by a question mark ("?").
OraOLEDB supports input, output, and input/output parameters for PL/SQL stored procedures and stored functions. OraOLEDB supports input parameters for SQL statements.
Joel P�rez -
Toplink JPA Calling Oracle Function Return sys_refcursor
I have a function which return sys_refcursor and I am trying to call this using JPA(1.0)
@NamedNativeQuery( name = "getEmpsByDeptId"
, query = "{ ? = call my_pck.getEmployees(:longName)}"
, resultClass = Employee.class
, hints = { @QueryHint(name = "org.hibernate.callable", value = "true")
, @QueryHint(name = "org.hibernate.readOnly", value = "true")
DAOImpl
query = getEntityManager().createNamedQuery("getEmpsByDeptId");
query.setParameter("longName", "SCOTT");
list = (List<Employee>)query.getResultList();
However when I execute, I am getting the following exception
Exception [TOPLINK-6132] (Oracle TopLink Essentials - 2.1 (Build b52-fcs (09/24/2008))):
oracle.toplink.essentials.exceptions.QueryException Exception Description:
Query argument 2 not found in list of parameters provided during query execution.
Query: ReadAllQuery(test.entity.Employee) at oracle.toplink.essentials.exceptions.QueryException.namedArgumentNotFoundInQueryParameters
I have tried using
call my_pck.getEmployees(?)}"
and
query.setParameter(1, "SCOTT");
However error remains the same and how can I resolve this issue?
I have used the same function with Hibernate using JPA2.0 and it has worked.
Thanklecaro wrote:
OK. But obviously there is some oracle object that one can call via an Access pass-through query which returns rows?Just to clarify. You could fetch data in Access from an Oracle function that returns a ref cursor using VBA editor. To use a pass-through query Oracle function should be a table function or pipelined table function:
CREATE OR REPLACE
TYPE testvalues_obj_type
AS OBJECT(
val varchar2(10),
isnum number
CREATE OR REPLACE
TYPE testvalues_tbl_type
AS TABLE OF testvalues_obj_type
CREATE OR REPLACE
FUNCTION fn_testvalues
RETURN testvalues_tbl_type
PIPELINED
IS
CURSOR testvalues_cur
IS
SELECT testvalues_obj_type(MyValue,fn_isnum(MyValue)) testvalues_obj
FROM t_values;
BEGIN
FOR v_rec IN testvalues_cur LOOP
PIPE ROW(v_rec.testvalues_obj);
END LOOP;
RETURN;
END;
/To test it in Oracle:
SELECT *
FROM TABLE(fn_testvalues)
VAL ISNUM
Merced 0
Pixie 0
452 1
SQL> Now in Access pass-trough query window enter:
SELECT *
FROM TABLE(fn_testvalues);SY.
Maybe you are looking for
-
Problem printing to ricoh aficio 5502 OSx 10.10
greetings, one of my co-workers is having an issue printing in the latest version of adobe acrobat reader,free version build number evades me but we downloaded it yesterday 3/12/15 so it's the most current. he can print most PDF files as long as they
-
Cannot open Itunes- Microsoft error
Every time I try to open Itunes 7.1 I get a Microsoft error saying it encountered a problem and needs to close. I have tried installing and reinstalling and It continues to come up with this message and it will not open. Any suggestions? I should nev
-
Recovering primary using standby database
Hi all, Here we have a dataguard environment with db1(db_unique_name) as primary and db2(db_unique_name) as physical standby database. We configured dataguard in 10g environments and we are not using grid control. And now we want to configure rman fo
-
Will the new watch be able to be used as a fob watch? In the NHS we are not allowed to wear wrist watches so this would a really useful feature.
-
Aperture resetting preferences on launch
My Aperture preferences are constantly being reset when launching Aperture. For example, the following preferences: View > Inspector > Swap Position Preferences > General > Automatically stack new versions View > Hide Toolbar Aperture > Commands > Cu