SQL query statement for stored procedure / function listing ...
Hi everyone,
Is there a SQL query to list all the stored procedures and functions of an user in an Oracle 8 database?
I have this idea:
select * from USER_SOURCE where TYPE = 'PROCEDURE' or TYPE = 'FUNCTION'
but I am not too sure whether this is correct.
Thanks in advance,
Eric
Yeah
I agree with you Garcia , my above posting was a correction to the query mentioned in the question only.
you are correct
If you only want the name of the object,
SELECT Object_Name from User_Objects where object_type in ( 'PROCEDURE' ,'FUNCTION');
is much faster than Selecting (distinct) from User_Source.
Similar Messages
-
Messages in forms for stored procedures/functions
Hi!
i wand to send message or raised exception from the
stored procedure/function to the oracle forms during
processing . how can i do this
Thanking UDeclare
invalid_code EXCEPTION;
PRAGMA EXCEPTION_INIT (invalid_code, -20009); -- raised from server side functionBEGIN
DO what eva ..... to raise exception
EXCEPTION
WHEN invalid_code
THEN handle appropriately
END;
Thanks,
N. -
Send SQL query or call stored procedure, which is best???
hello experts!!
i would like to ask what will be the best implementation on querying a database using Java, send a SQL query(insert into table values...) or call stored procedure(just pass parameters)?? and also in stored procedure does "autoCommit/rollback" applies/make sense??I searched google for this:
Stored Procedures vs. SQL
and found this useful link:
http://www.karlkatzke.com/stored-procedures-vs-sql-calls/
I thiink you should also read up on other articles based on such google searches
to get other opinions. Also, read the links provided by that article.
Personnally, I think stored procedures should be avoided unless there is a definite
advantage as specified in the above article. Especially not used for CRUD operations.
Also, no matter where you put the SQL, it should be documented. I've seen too many stored procedures that aren't documented. -
How to convert simple SQL Select statements into Stored Procedures?
Hi,
How can I convert following SELECT statement into a Stored Procedure?
SELECT a.empno, b.deptno
FROM emp a, dept b
WHERE a.deptno=b.deptno;
Thanking in advance.
Wajidstored procedure is nothing but a named PL/SQL block
so you can do it like this see below example
SQL> create or replace procedure emp_details is
2 cursor c1 is SELECT a.empno, b.deptno
3 FROM scott.emp a, scott.dept b
4 WHERE a.deptno=b.deptno;
5 begin for c2 in c1
6 LOOP
7 dbms_output.put_line('name is '||c2.empno);
8 dbms_output.put_line('deptno is ' ||c2.deptno);
9 END LOOP;
10 END;
11 /
Procedure created.and to call it use like below
SQL> begin
2 emp_details;
3 end;
4 /
PL/SQL procedure successfully completed.
SQL> set serveroutput on;
SQL> /
empno is 7839
deptno is 10
empno is 7698
deptno is 30
empno is 7782
deptno is 10
empno is 7566
deptno is 20
empno is 7654
deptno is 30
empno is 7499
deptno is 30
empno is 7844
deptno is 30
empno is 7900
deptno is 30
empno is 7521
deptno is 30
empno is 7902
deptno is 20
empno is 7369
deptno is 20
empno is 7788
deptno is 20
empno is 7876
deptno is 20
empno is 7934
deptno is 10Edited by: Qwerty on Sep 17, 2009 8:37 PM -
ALDSP 3.0 -- schema owner for stored procedure or SQL Statement
Using ALDSP, I have a need to create a physical service based on a stored procedure or a SQL statement. I am wondering what will happen when I move to another deployment environment where the schema owner changes. In our QA and Prod environments, we have a different schema owner for all tables in the application (the DBAs believe this prevents unwanted updates to a prod environment). DSP elegantly supports this for normal table- and view-based physical services by mapping schemas through the DSP console after deployment. Will I get the same type of mapping capability for stored procedures and SQL statements? I noticed that I can add a SQL-based function to a physical service...is there a way to pass in the physical table name from that data service to the procedure or SQL statement?
Thanks,
JeffSchema name substitution should work for stored procedures just like it does for tables. If it doesn't - report a bug.
You don't get any help for sql-statement based data services - dsp doesn't parse the sql provided. One thing you could do is use the default schema (following the user of your connection pool), and not specify the schema in your sql-statement. -
Parameter index move while executing PL/SQL stored procedure/function
Hello, community.
Have a question for you. It looked like very easy to write some small JDBC-wrapper to handle stored procedure/functions call for Oracle.
Here is the code snippet of it:
import java.io.Serializable;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Iterator;
import javax.sql.DataSource;
import oracle.jdbc.driver.OracleTypes;
import org.apache.log4j.Logger;
public class SmallHelper {
public static final int CALL_TYPE__PROCEDURE = 1;
public static final int CALL_TYPE__FUNCTION = 2;
public static final int PARAMETER__IN = 1;
public static final int PARAMETER__OUT = 2;
private static final Logger log = Logger.getLogger(SmallHelper.class);
private Connection con = null;
private CallableStatement statement = null;
private String name;
private int type;
private int resultType;
private HashMap arguments = new HashMap();
* Creates connection using data source as parameter.
* @param ds - data source
* @throws EhlApplicationException
public SmallHelper(DataSource ds) throws Exception {
try {
con = ds.getConnection();
catch (SQLException e) {
ExceptionHelper.process(e);
public void registerProcedure(String name) {
this.name = name;
this.type = CALL_TYPE__PROCEDURE;
public void registerFunction(String name, int resultType) {
this.name = name;
this.resultType = resultType;
this.type = CALL_TYPE__FUNCTION;
* NB! When You're dealing with stored function index should start with number 2!
public void registerArgument(int index, Object value, int type, int inOutType) {
arguments.put(new Long(index), new CallableStatementArgument(value, type, inOutType));
private String getSQL() {
StringBuffer str = new StringBuffer("{ call ");
if ( type == CALL_TYPE__FUNCTION )
str.append(" ? := ");
str.append(name).append("( ");
for ( Iterator i = arguments.values().iterator(); i.hasNext(); ) {
i.next();
str.append("?");
if ( i.hasNext() )
str.append(", ");
str.append(") }");
return str.toString();
public void execute() throws SQLException{
String query = getSQL();
statement = con.prepareCall(query);
if ( type == CALL_TYPE__FUNCTION )
statement.registerOutParameter(1, resultType);
for ( Iterator i = arguments.keySet().iterator(); i.hasNext(); ) {
Long index = (Long) i.next();
CallableStatementArgument argument = (CallableStatementArgument) arguments.get(index);
int type = argument.getType();
if ( argument.getInOutType() == PARAMETER__OUT )
statement.registerOutParameter(index.intValue(), type);
else if ( type != OracleTypes.CURSOR )
statement.setObject(index.intValue(), argument.getValue(), type);
log.info("Executing SQL: "+query);
statement.execute();
public CallableStatement getStatement() {
return statement;
public void close() throws EhlApplicationException {
try {
if (statement != null)
statement.close();
if (con != null)
con.close();
catch (SQLException e) {
EhlSqlExceptionHelper.process(e);
private class CallableStatementArgument implements Serializable{
private Object value;
private int type;
private int inOutType;
public CallableStatementArgument(Object value, int type, int inOutType) {
this.value = value;
this.type = type;
this.inOutType = inOutType;
public int getType() {
return type;
public Object getValue() {
return value;
public int getInOutType() {
return inOutType;
}It was really done in 10-15 mins, so don't be very angry at code quality :)
Here is the problem.:
helper.registerProcedure("pkg_diagnosis.search_diagnosis");
helper.registerArgument(1, null, OracleTypes.CURSOR, EhlJdbcCallableStatementHelper.PARAMETER__OUT);
helper.registerArgument(2, pattern, OracleTypes.VARCHAR, EhlJdbcCallableStatementHelper.PARAMETER__IN);
helper.registerArgument(3, lang, OracleTypes.VARCHAR, EhlJdbcCallableStatementHelper.PARAMETER__IN);
helper.registerArgument(4, EhlSqlUtil.convertSetToString(langs, ","), OracleTypes.VARCHAR, EhlJdbcCallableStatementHelper.PARAMETER__IN);
helper.registerArgument(5, EhlSqlUtil.convertSetToString(diagnosisClass, ","), OracleTypes.VARCHAR, EhlJdbcCallableStatementHelper.PARAMETER__IN);
helper.registerArgument(6, parentId, OracleTypes.NUMBER, EhlJdbcCallableStatementHelper.PARAMETER__IN);
helper.execute();
ResultSet rs = ((OracleCallableStatement) helper.getStatement()).getCursor(1);
procedure definition:
procedure search_diagnosis (l_res OUT dyna_cur,
in_search_string IN VARCHAR2,
in_search_lang IN VARCHAR2,
in_lang_list IN VARCHAR2,
in_diag_class_list IN VARCHAR2,
in_parent_id IN NUMBER) Procedure call has inner check that fail because of som strange reason:
in_search_string has 2 as index, that is correct. but procedure recieves is as number 3 in parameter list (what is in_search_lang). Other parameters are moved to. It seems like a cursor takes 2 places in definition. It's clear that if I put in_search_string as 1 parameter and cursor as 0 I'll get invalid parametr bindong(s) exception. So... any ideas why 2nd parameter is actually 3rd?
Thanks beforehand.hmm...moreover:
if we change procedure to function and call it in a simple way:
CallableStatement stmnt = helper.getConnection().prepareCall("begin ? := pkg_diagnosis.search_diagnosis(?,?,?,?,?); end;");
stmnt.registerOutParameter(1, OracleTypes.CURSOR);
stmnt.setString(2, pattern);
stmnt.setString(3, lang);
stmnt.setString(4, langs);
stmnt.setString(5, diagnosisClass);
stmnt.setObject(6, parentId, OracleTypes.NUMBER);
stmnt.execute();
ResultSet rs = (ResultSet) stmnt.getObject(1);the exception is:
[BEA][Oracle JDBC Driver][Oracle]ORA-06550: line 1, column 14:
PLS-00382: expression is of wrong type
ORA-06550: line 1, column 7:
PL/SQL: Statement ignoredif we return some string or number - it works. but when we want cursor back - it fails.
cursor is defined like ordinary dynamic cursor:
TYPE dyna_cur IS REF CURSOR; -
MS SQL Server 7 - Performance of Prepared Statements and Stored Procedures
Hello All,
Our team is currently tuning an application running on WL 5.1 SP 10 with a MS
SQL Server 7 DB that it accesses via the WebLogic jConnect drivers. The application
uses Prepared Statements for all types of database operations (selects, updates,
inserts, etc.) and we have noticed that a great deal of the DB host's resources
are consumed by the parsing of these statements. Our thought was to convert many
of these Prepared Statements to Stored Procedures with the idea that the parsing
overhead would be eliminated. In spite of all this, I have read that because
of the way that the jConnect drivers are implemented for MS SQL Server, Prepared
Statments are actually SLOWER than straight SQL because of the way that parameter
values are converted. Does this also apply to Stored Procedures??? If anyone
can give me an answer, it would be greatly appreciated.
Thanks in advance!Joseph Weinstein <[email protected]> wrote:
>
>
Matt wrote:
Hello All,
Our team is currently tuning an application running on WL 5.1 SP 10with a MS
SQL Server 7 DB that it accesses via the WebLogic jConnect drivers.The application
uses Prepared Statements for all types of database operations (selects,updates,
inserts, etc.) and we have noticed that a great deal of the DB host'sresources
are consumed by the parsing of these statements. Our thought was toconvert many
of these Prepared Statements to Stored Procedures with the idea thatthe parsing
overhead would be eliminated. In spite of all this, I have read thatbecause
of the way that the jConnect drivers are implemented for MS SQL Server,Prepared
Statments are actually SLOWER than straight SQL because of the waythat parameter
values are converted. Does this also apply to Stored Procedures???If anyone
can give me an answer, it would be greatly appreciated.
Thanks in advance!Hi. Stored procedures may help, but you can also try MS's new free type-4
driver,
which does use DBMS optimizations to make PreparedStatements run faster.
Joe
Thanks Joe! I also wanted to know if setting the statement cache (assuming that
this feature is available in WL 5.1 SP 10) will give a boost for both Prepared Statements
and stored procs called via Callable Statements. Pretty much all of the Prepared
Statements that we are replacing are executed from entity bean transactions.
Thanks again -
How to query DDL locks on stored procedures/functions and packages?
Hi!
The subject says it all: How do I see existing DDL locks on stored procedures/functions and packages?
While a procedure is executed it can't be deleted or replaced, so there has to be a DDL lock on it. The information does not seem to be in V$LOCK or V$LOCKED_OBJECTS.
Thanks!
Marcus
Edited by: MMarcus on Nov 21, 2009 3:43 PMHello,
Here you can find an article about the view DBA_DDL_LOCKS:
[http://www.praetoriate.com/int_40.htm]
If you don't have this view on the Data Dictionary, you may have
to execute the "OH/rdbms/admin/catblock.sql" script first.
Hope it can help.
Best regards,
Jean-Valentin -
when debugging SSIS, the "Execute SQL Task" runs a stored procedure and returns the expected value. When running the package a second time, the task returns an unexpected value. When running in VS2012 SQL editor, everything operates as expected.
Please help me debug how to get the stored proc to return the same value every time the SSIS Package is run. thanks!
Here is the sequence of events and what happens....
Look for a Positor that matches the Application, Host, and User
No matching PositorId is found, Creates new Positor row, returns that new PositorId
Use PositorId to upload some data (Every thing works)
re-run/debug the ssis pacakge
Look for a Positor that matches the Application, Host, and User
<No clue what is happening>
Returns -1 (SHOULD BE the same PositorId value returned in #2)
"Execute SQL Task" Setup: No edits to Result Set nor Expressions
"Execute SQL Task" Setup: GENERAL
"Execute SQL Task" Setup: PARAMETER MAPPING
SP called by "Execute SQL Task"
CREATE PROCEDURE [posit].[Return_PositorId]
AS
BEGIN
DECLARE @PositorId INT = [posit].[Get_PositorId]();
IF (@PositorId IS NULL)
BEGIN
DECLARE @ProcedureDesc NVARCHAR(257) = OBJECT_SCHEMA_NAME(@@PROCID) + N'.' + OBJECT_NAME(@@PROCID);
DECLARE @PositorNote NVARCHAR(348) = N'Automatically created by: ' + @ProcedureDesc;
EXECUTE @PositorId = [posit].[Insert_Positor] @PositorNote;
END;
RETURN @PositorId;
END;
Supporting SQL Objects:
CREATE FUNCTION [posit].[Get_PositorId]
RETURNS INT
AS
BEGIN
DECLARE @PositorId INT = NULL;
SELECT TOP 1
@PositorId = [p].[PO_PositorId]
FROM [posit].[PO_Positor] [p]
WHERE [p].[PO_PositorApp] = APP_NAME()
AND [p].[PO_PositorHost] = HOST_NAME()
AND [p].[PO_PositorUID] = SUSER_ID();
RETURN @PositorId;
END;
GO
CREATE PROCEDURE [posit].[Insert_Positor]
@PositorNote NVARCHAR(348) = NULL
AS
BEGIN
DECLARE @ProcedureDesc NVARCHAR(257) = OBJECT_SCHEMA_NAME(@@PROCID) + N'.' + OBJECT_NAME(@@PROCID);
SET @PositorNote = COALESCE(@PositorNote, N'Automatically created by: ' + @ProcedureDesc);
DECLARE @Id TABLE
[Id] INT NOT NULL
INSERT INTO [posit].[PO_Positor]([PO_PositorNote])
OUTPUT [INSERTED].[PO_PositorId]
INTO @Id([Id])
VALUES(@PositorNote);
RETURN (SELECT TOP 1 [Id] FROM @Id);
END;
GO
CREATE TABLE [posit].[PO_Positor]
[PO_PositorId] INT NOT NULL IDENTITY(0, 1),
[PO_PositorApp] NVARCHAR(128) NOT NULL CONSTRAINT [DF__PO_Positor_PO_PositorApp] DEFAULT(APP_NAME()),
CONSTRAINT [CL__PO_Positor_PO_PositorApp] CHECK([PO_PositorApp] <> ''),
[PO_PositorName] NVARCHAR(256) NOT NULL CONSTRAINT [DF__PO_Positor_PO_PositorName] DEFAULT(SUSER_SNAME()),
CONSTRAINT [CL__PO_Positor_PO_PositorName] CHECK([PO_PositorName] <> ''),
[PO_PositorHost] NVARCHAR(128) NOT NULL CONSTRAINT [DF__PO_Positor_PO_PositorHost] DEFAULT(HOST_NAME()),
CONSTRAINT [CL__PO_Positor_PO_PositorHost] CHECK([PO_PositorHost] <> ''),
[PO_PositorSID] VARBINARY(85) NOT NULL CONSTRAINT [DF__PO_Positor_PO_PositorSID] DEFAULT(SUSER_SID()),
[PO_PositorUID] INT NOT NULL CONSTRAINT [DF__PO_Positor_PO_PositorUID] DEFAULT(SUSER_ID()),
[PO_PositorNote] VARCHAR(348) NULL CONSTRAINT [CL__PO_Positor_PO_PositorNote] CHECK([PO_PositorNote] <> ''),
[PO_tsInserted] DATETIMEOFFSET(7) NOT NULL CONSTRAINT [DF__PO_Positor_PO_tsInserted] DEFAULT(SYSDATETIMEOFFSET()),
[PO_RowGuid] UNIQUEIDENTIFIER NOT NULL CONSTRAINT [DF__PO_Positor_PO_RowGuid] DEFAULT(NEWSEQUENTIALID()) ROWGUIDCOL,
CONSTRAINT [UX__PO_Positor_PO_RowGuid] UNIQUE NONCLUSTERED([PO_RowGuid]),
CONSTRAINT [UK__Positor] UNIQUE CLUSTERED ([PO_PositorApp] ASC, [PO_PositorHost] ASC, [PO_PositorUID] ASC),
CONSTRAINT [PK__Positor] PRIMARY KEY ([PO_PositorId] ASC)
GO
ssdThe error is in item 7: Returns -1 (SHOULD BE the same PositorId value returned in #2); but no error message is returned or thrown from SSIS.
The error message indicated referential integrity is not upheld when inserting records. This error message occurs AFTER the Execute SQL Task successfully completes; the E.SQL Task returns -1. The executed SQL code will not allow values less than 0
([PO_PositorId] INT NOT NULL IDENTITY(0, 1),)
[Platts Valid [41]] Error: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80040E2F.
An OLE DB record is available. Source: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80040E2F Description: "The statement has been terminated.".
An OLE DB record is available. Source: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80040E2F Description:
"The INSERT statement conflicted with the FOREIGN KEY constraint "FK__PricingPlatts_Posit_PositorId". The conflict occurred in database "Pricing", table "posit.PO_Positor", column 'PO_PositorId'.".
The aforementioned FOREIGN KEY constraint is due to the value being returned by the Execute SQL Task.; therefore, the error lies in the value returned by the Execute SQL Task. -
Hi all,
I have created one SP for sending mail with formatting the HTML code inside script whenever i am individually declaring it and printing its expected but the problem at time of executing SP its giving error like this
Msg 132, Level 15, State 1, Line 47
The label 'http' has already been declared. Label names must be unique within a query batch or stored procedure.
what is the possibilities to overcome this problem follwing is my stored procedure code
ALTER PROCEDURE [dbo].[USP_DataLoadMailsend_essRules]
AS
BEGIN
SET NOCOUNT ON;
SET XACT_ABORT ON;
BEGIN TRY
---BEGIN TRANSACTION T1
DECLARE @packagelogid INT
DECLARE @batchlogid INT
DECLARE @packagestatus CHAR(2)
select @batchlogid =19870
--print(@batchlogid)
DECLARE @script VARCHAR(MAX)
DECLARE @tableHTML VARCHAR(MAX)
DECLARE @mailheader VARCHAR(50)
DECLARE @count INT
DECLARE @recipients1 VARCHAR(50)
DECLARE @subject1 VARCHAR(200)
DECLARE @sql VARCHAR(MAX)
Declare @UserId varchar(Max)
Declare @Information varchar(max)
Declare @TableHTML1 varchar(max)
Declare @TableHTML2 varchar(max)
SET @mailheader = ''
SET @mailheader = (select case
WHEN FileUpload = 'F'
THEN 'BussinessRules is Aborted'
WHEN (InRule = 'S')
AND (
SELECT sum(isnull(ErrorRecords, 0)) tot
FROM abc.FileUploadSummary z
WHERE z.BatchId = bts.BatchId
GROUP BY BatchId
) > 0
THEN 'BussinessRules is Processed with Errors'
WHEN InRule = 'F'
THEN 'BussinessRules is Failed'
WHEN (InRule = 'S')
AND (
SELECT sum(isnull(ErrorRecords, 0)) tot
FROM abc.FileUploadSummary z
WHERE z.BatchId = bts.BatchId
GROUP BY BatchId
) = 0
THEN 'BussinessRules is Succeeded'
end
from abc..BatchStatus bts where BatchId=@batchlogid)
/* Selecting Person Mail as Recipient */
SELECT TOP 1 @recipients1 = EmailId FROM abc.PersonEmail
WHERE PersonId = ( SELECT TOP 1 personid FROM abc.FileUploadSummary WHERE BatchId = @batchlogid )AND EmailTypeId = 1
/* Selecting UserId*/
select top 1 @UserId=loginid from abc.FUS where BatchId=@batchlogid
/*Selecting Information about the Status */
Set @Information=
(select case
WHEN FileUpload = 'F'
THEN 'BussinessRules is Aborted'
WHEN (InRule = 'S')
AND (
SELECT sum(isnull(ErrorRecords, 0)) tot
FROM abc.FileUploadSummary z
WHERE z.BatchId = bts.BatchId
GROUP BY BatchId
) > 0
THEN 'BussinessRules is Processed with Errors'
WHEN InRule = 'F'
THEN 'BussinessRules is Failed'
WHEN (InRule = 'S')
AND (
SELECT sum(isnull(ErrorRecords, 0)) tot
FROM abc.FileUploadSummary z
WHERE z.BatchId = bts.BatchId
GROUP BY BatchId
) = 0
THEN 'BussinessRules is Succeeded'
end + N' <br> <B>BatchId= '+ convert(varchar(250),(select @batchlogid)) +'</B>'
from abc..BatchStatus bts where BatchId=@batchlogid )
/*Selecting the Error Reason*/
if exists (select 1 from BatchStatus where BatchId=@batchlogid and ( InRule='f'))
begin
set @TableHTML1 = '<table border=1><tr><th>Sr.No.</th><th><P>Error Reason :</th></tr>'+
cast((select td= ROW_NUMBER()over (order by (select 1)),'',
td=isnull(e.ErrorDescription, '')
from abc.x.tbPackageErrorLog e --50594
join abc.x.tbPackageLog p -- 10223
on p.PackageLogID=e.PackageLogID
where p.BatchLogID= @batchlogid FOR XML PATH('tr'), TYPE )
as NVarchar(max)) +'</table>'
-- print @tableHTML
if not exists (select 1 from BatchStatus where BatchId=@batchlogid and ( InRule='f'))
set @TableHTML2 = 'Error Reason :N/A'
end
-- insert into #tmp values ( @TableHTML1)
--select * from #tmp
Set @tableHTML= 'Hello '+@UserId+', <br>Information:'+isnull(@Information,'') +
'<Table Border=1><Tr><th>Sr No</th><th>Uploaded files </th>:'+
CAST ((select td= ROW_NUMBER()over(order by f.FileUploadId), '',
td = f.TableName , ''
from abc.FileUploadSummary F where BatchId=@batchlogid
FOR XML PATH('tr'), TYPE ) AS NVARCHAR(max) )
+'</table>'+
'Error Reason :'+isnull(isnull(@TableHTML1,'')+ isnull(@TableHTML2,''),'N/A')+ --concat (isnull(@TableHTML1,''),isnull(@TableHTML2,'')
'<br> Please login to Your Account for further Details..!'
+'<br>@Note: This is system generated message, Do not reply to this mail. <br>Regards,<br>'+
'Admin'
print @tableHTML
SET @sql = ' EXEC msdb.dbo.sp_send_dbmail @profile_name = ''DBA_mail_test''
,@recipients = ''' + isnull(@recipients1,'''') + ''',@subject = ''' + isnull(@mailheader,'''') + ''',
@body = ''' +isnull(@tableHTML,'''')+ ''',
@body_format = ''HTML'''
Exec(@sql)
END TRY
BEGIN CATCH
PRINT error_message()
-- Test whether the transaction is uncommittable.
-- IF (XACT_STATE()) = - 1
-- ROLLBACK TRANSACTION --Comment it if SP contains only select statement
DECLARE @ErrorFromProc VARCHAR(500)
DECLARE @ErrorMessage VARCHAR(1000)
DECLARE @SeverityLevel INT
SELECT @ErrorFromProc = ERROR_PROCEDURE()
,@ErrorMessage = ERROR_MESSAGE()
,@SeverityLevel = ERROR_SEVERITY()
--INSERT INTO dbo.ErrorLogForUSP (
-- ErrorFromProc
-- ,ErrorMessage
-- ,SeverityLevel
-- ,DateTimeStamp
--VALUES (
-- @ErrorFromProc
-- ,@ErrorMessage
-- ,@SeverityLevel
-- ,GETDATE()
END CATCH
END
please help me to solve this problem
Niraj SevalkarThis is no string http in your procedure. Then again the error message points to a line 47 outside a stored procedure. I can't tell it is outside, since there is no procedure name.
But I see that you have this piece of dynamic SQL:
SET @sql = ' EXEC msdb.dbo.sp_send_dbmail @profile_name = ''DBA_mail_test''
,@recipients = ''' + isnull(@recipients1,'''') + ''',@subject = ''' + isnull(@mailheader,'''') + ''',
@body = ''' +isnull(@tableHTML,'''')+ ''',
@body_format = ''HTML'''
Exec(@sql)
Why is this dynamic SQL at all? Why not just make plain call to sp_send_dbmail?
EXEC msdb.dbo.sp_send_dbmail @profile_name = 'DBA_mail_test'
,@recipients = @recipients1, @subject = @mailheader, @body = @tableHTML
Erland Sommarskog, SQL Server MVP, [email protected] -
I need return the result of a query on a stored procedure
I need return the result of a query on a stored procedure, I mean when I execute a stored procedure it returns a result set as a select query.
Best regards...If you want some pl/sql code that can be used in a query as it were a table you may be interested in table functions:
SQL> create or replace type
2 t_emp is object (
3 name varchar2(30),
4 hire_date date,
5 salary number);
6 /
Tipo creato.
SQL> create or replace type
2 t_emptab is table of t_emp;
3 /
Tipo creato.
SQL> create or replace function tab_fun(p_dept in number)
2 return t_emptab is
3 e t_emptab;
4 begin
5 select t_emp(ename,hiredate,sal)
6 bulk collect into e
7 from emp
8 where deptno=p_dept;
9
10 return dip;
11 end;
12 /
Funzione creata.
SQL> select *
2 from table(tab_fun(20));
NAME HIRE_DATE SALARY
SMITH 17-DIC-80 800
JONES 02-APR-81 2975
SCOTT 09-DIC-82 3000
ADAMS 12-GEN-83 1100
FORD 03-DIC-81 3000A procedure cannot be used in a select statement.
Max
http://oracleitalia.wordpress.com -
Using C# instead of pl/sql in a CLR stored procedure, benefits?
Hello dear experts,
I was just playing around with C# and a little stored procedure I deployed to my Oracle 11.
My questions are:
Is it possible to call this "CLR c#" stored procedure in a different way than I call a standard pl/sql stored procedure from a C# client, maybe by something like referring to the same c# classname which I chose to wrap the stored procedure/function in?
Is it possible to eg. return c# classes or c# arrays / own datatypes created within the CLR stored procedure to a C# client?
Can I build up a c# array within my oracle c# stored procedure and return it to a C# client directly, or do I still have to do all the marshalling based on the standard pre-defined data types (number, varchar2 etc) myself and copy them to c# class members?
Example: I have c# stored procedure like this:
namespace oracle
public class Crosssorter
public static int GetChute(int parcelNo)
int nChute=0;
OracleConnection dbcon = new OracleConnection();
dbcon.ConnectionString = "context connection=true"; // Wir benutzen die Session des Aufrufers
dbcon.Open();
OracleCommand cmd = dbcon.CreateCommand();
cmd.CommandText = "select ChuteNo ...[blabla] ";
cmd.Parameters.Add(":1", OracleDbType.Int32, parcelNo, ParameterDirection.Input);
OracleDataReader reader = cmd.ExecuteReader();
while (reader.Read())
nChute = reader.GetInt32(0);
reader.Close();
cmd.Dispose();
return (nChute);
Can I reuse the class "Crosssorter" within my c# client application in order to access the function 'GetChute' more easily or is this classname only chosen because it has to have a name?
Can I write an oracle C# stored proc so that a complex c# object is returned?
So instead of a simple thing like 'public static int GetChute(int parcelNo)' maybe something like
'public static int GetChute(
int parcelNo,
CChuteObject myChute)' <---- !!
where CChuteObject is a C# class?
In case all this is not possible, is there a solution to achieve this easily?
Thank you for reading and thinking.
Bernd.Hi Bernd,
For best results, you may want to post this over in the [.NET Stored Procedures|http://forums.oracle.com/forums/forum.jspa?forumID=254] forum.
Greg -
How to check performance for Stored procedure or Package.
Hi ,
Can any one please tell me , how to check performance for Stored procedure or Function or Package
Thanks&Regards,
Sanjeev.user13483989 wrote:
Hi ,
Can any one please tell me , how to check performance for Stored procedure or Function or Package
Thanks&Regards,
Sanjeev.Oracle has provided set of Tools to monitor the Performance.
Profilers being one of them; If you wish to understand more on PL/SQL Optimization, please read PL/SQL Optimization and Tuning.
See example of DBMS_PROFILER.
See example of PLSQL Hierarchial Profiler -
Structure for Stored Procedure Call
Hi All,
Guys I am trying to call a stored procedure call using receiver jdbc adapter...
This is the outgoing message:
<b><?xml version="1.0" encoding="UTF-8" ?>
- <ns0:SP_DB xmlns:ns0="urn:sce-com:xi:dev:mohammf">
- <Test>
- <PP_TEST_P action="EXECUTE">
<table>PP_TEST_P</table>
<RECTYPEIND type="CHAR">CC</RECTYPEIND>
<JENUMBER type="CHAR">76724</JENUMBER>
<COMPANY type="CHAR">BCEO</COMPANY>
<CONSTANT1 type="CHAR">AB</CONSTANT1>
<SYSTEMDATE type="CHAR">08/12/2007</SYSTEMDATE>
<DR_CR_ID type="CHAR">0</DR_CR_ID>
<AMOUNT type="CHAR">934928599475843</AMOUNT>
<MONTH_NUMBER type="CHAR">000008</MONTH_NUMBER>
<COST_CENTER type="CHAR">LosAngeles</COST_CENTER>
<ORDERNO type="CHAR">694950375830</ORDERNO>
<WBS type="CHAR">Southern California Edis</WBS>
<ACCOUNTID type="CHAR">6949503758</ACCOUNTID>
<BATCH_ID type="CHAR">3408102007</BATCH_ID>
<ASSIGNMENT type="CHAR">Technology Solutio</ASSIGNMENT>
<GL_JOURNAL_CATEGORY type="CHAR">GHTF</GL_JOURNAL_CATEGORY>
<PROFIT_CENTER type="CHAR">3434694950</PROFIT_CENTER>
<REFDOCNUMBER type="CHAR">00000000004304300056006056</REFDOCNUMBER>
</PP_TEST_P>
- <PP_TEST_P action="EXECUTE">
<table>PP_TEST_P</table>
<RECTYPEIND type="CHAR">XX</RECTYPEIND>
<JENUMBER type="CHAR">76724</JENUMBER>
<COMPANY type="CHAR">BCEO</COMPANY>
<CONSTANT1 type="CHAR">AB</CONSTANT1>
<SYSTEMDATE type="CHAR">08/12/2007</SYSTEMDATE>
<DR_CR_ID type="CHAR">0</DR_CR_ID>
<AMOUNT type="CHAR">934928599475843</AMOUNT>
<MONTH_NUMBER type="CHAR">000008</MONTH_NUMBER>
<COST_CENTER type="CHAR">LosAngeles</COST_CENTER>
<ORDERNO type="CHAR">694950375830</ORDERNO>
<WBS type="CHAR">Southern California Edis</WBS>
<ACCOUNTID type="CHAR">6949503758</ACCOUNTID>
<BATCH_ID type="CHAR">3408102007</BATCH_ID>
<ASSIGNMENT type="CHAR">Technology Solutio</ASSIGNMENT>
<GL_JOURNAL_CATEGORY type="CHAR">GHTF</GL_JOURNAL_CATEGORY>
<PROFIT_CENTER type="CHAR">3434694950</PROFIT_CENTER>
<REFDOCNUMBER type="CHAR">00000000004304300056006056</REFDOCNUMBER>
</PP_TEST_P>
</Test>
</ns0:SP_DB></b>
The error I am getting is:
<b><i>2007-08-20 09:44:05 Error Unable to execute statement for table or stored procedure. 'PP_TEST_P' (Structure 'Test') due to java.sql.SQLException: ERROR: Invalid XML document format for stored procedure: 'type="<SQL-type>"' attribute is missing for element 'table' (Setting a SQL-type (e.g. INTEGER, CHAR, DATE etc.) is mandatory !)
2007-08-20 09:44:05 Error JDBC message processing failed; reason Error processing request in sax parser: Error when executing statement for table/stored proc. 'PP_TEST_P' (structure 'Test'): java.sql.SQLException: ERROR: Invalid XML document format for stored procedure: 'type="<SQL-type>"' attribute is missing for element 'table' (Setting a SQL-type (e.g. INTEGER, CHAR, DATE etc.) is mandatory !)
2007-08-20 09:44:05 Error MP: Exception caught with cause com.sap.aii.af.ra.ms.api.RecoverableException: Error processing request in sax parser: Error when executing statement for table/stored proc. 'PP_TEST_P' (structure 'Test'): java.sql.SQLException: ERROR: Invalid XML document format for stored procedure: 'type="<SQL-type>"' attribute is missing for element 'table' (Setting a SQL-type (e.g. INTEGER, CHAR, DATE etc.) is mandatory !)
2007-08-20 09:44:05 Error Exception caught by adapter framework: null
2007-08-20 09:44:05 Error Delivery of the message to the application using connection JDBC_http://sap.com/xi/XI/System failed, due to: com.sap.aii.af.ra.ms.api.RecoverableException: Error processing request in sax parser: Error when executing statement for table/stored proc. 'PP_TEST_P' (structure 'Test'): java.sql.SQLException: ERROR: Invalid XML document format for stored procedure: 'type="<SQL-type>"' attribute is missing for element 'table' (Setting a SQL-type (e.g. INTEGER, CHAR, DATE etc.) is mandatory !).</i></b>
Pls advice..
XIer
Message was edited by:
XIerHi,
Check your DATA TYPE attributes with the attributes of the column names in the Database table. There is a mismatch between the DT and Table in the database.
<b>Cheers,
*RAJ*</b> -
Query slower in stored procedure(after upgrade to 16)
Hi all,
We are looking to upgrade our SQL Anywhere 9 database to 16. We thought version 16 is slower in update tables, but the reason of slowness are query's in stored procedures called from the trigger. One of the query's has a duration of 8 times the duration in version 9!! When I run the query in Interactive Sql(v16), they run fast like version 9. So the query runs slower in a stored procedure.
I thought parameter sniffing, but it's not MS Sql Server. I've no idea why it was good in v9 and bad in v16. Have someone a idea?
It's a query with subquery's in the where , a view in the from. In the view are unions. Looks not so special.
thanksIt may be more convenient for you to ask this question on the other forum: SAP SQL Anywhere Forum
Preamble...
It sometimes happens that (a) the same query will perform faster or slower in different versions because of different behaviors by the query optimizer. In most cases a minor change is necessary to restore good performance; in some rare cases, the changes are difficult.
It also sometimes happens that (b) the same query will perform faster or slower under different operating conditions; e.g., client request (ISQL) versus inside a BEGIN block (stored procedure). Again, minor changes all that's required in most cases, sometimes otherwise.
Details...
In order to help, we will need more information. Two graphical plans with statistics for the same problematic query, both using V16, one captured in ISQL, and the other one captured inside the stored procedure, is the best way to pass on the information; ALL OTHER forms are inadequate, especially prose descriptions and edited snippets of code (that way lies frustration for all parties).
There are a number of articles about graphical plans on this blog.
Maybe you are looking for
-
How to find out if a user is logged into a windows XP or VISTA machine
Hi, Could somebody please tell me how to find out remotely over a LAN, whether a user is logged into a computer that is running windows XP/VISTA or not? How can this be programmatically done if we know the name of the remote machine? Thanks. Ravisara
-
Hi Friend i want to know how to take advance against a sales order and how to check while making further document and how to settle advance against Billing document. Thanks and Regards, Anil Agrawal
-
Problem in Update using STREAMS in Ora 10g EE
Hi I am using Oracle 10g Enterprise Edition for replicating datas after failover occurs in DB I had followed the steps in below URL.. http://blogs.ittoolbox.com/oracle/guide/archives/oracle-streams-configuration-change-data-capture-13501 The replicat
-
Not able to transfer Integration Process in ID. Also not seen in SXI_Cache
Hi Experts, I am trying a BPM scenario. I have created all design objects along with Integration Process in IR and saved and activated the same. Issue is : I am not able to transfer the Integration Scenario from IR in ID. I am also not able to see th
-
How do I recover a missing/stolen card
Does anyone have any clue how to get a card that is lost or stolen reactivated....