Need to create a Stored Procedure
Hi,
I have the following requirement. I have got securities historic tables in 2 of the databases and I need to compare the data in these tables based on some specific columns only.
The output can be a table or a cursor. Can anyone help me out in doing this??
I have 2 tables APP_DEVELOPMENT.SECMASTER_HIST and SECURITY.SECMASTER_HISTORY.
CREATE TABLE APP_DEVELOPMENT.SECMASTER_HIST
SECURITY_ALIAS NUMBER NOT NULL,
COUPON NUMBER(28,12),
CURRENCY_CODE CHAR(30 BYTE),
INVESTMENT_TYPE CHAR(4 BYTE),
ISSUE_NAME VARCHAR2(255 BYTE),
PRIMARY_ASSET_ID CHAR(100 BYTE)
EFFECTIVE_DATE DATE
and
CREATE TABLE SECURITY.SECMASTER_HISTORY
SECURITY_ALIAS NUMBER,
COUPON NUMBER(28,12),
CURRENCY_CODE CHAR(30 BYTE),
INVESTMENT_TYPE CHAR(4 BYTE),
ISSUE_NAME VARCHAR2(255 BYTE),
PRIMARY_ASSET_ID CHAR(100 BYTE)
EFFECTIVE_DATE DATE
I need to compare the CURRENCY_CODE,COUPON and INVESTMENT_TYPE column values.
The output needed is a cursor or a table showing data from both the tables which differs based on the above mentioned 3 columns.
NOTE: SECURITY.SECMASTER_HISTORY is in a different DB and can be accessed via DB Links
Thanks!
select CURRENCY_CODE,COUPON and INVESTMENT_TYPE, count(src1), count(src2)
from ( select a.CURRENCY_CODE, a.COUPON, a.INVESTMENT_TYPE, 1 src1, to_number(null) src2 from <table1> a
union all
select b.CURRENCY_CODE, b.COUPON, b.INVESTMENT_TYPE, to_number(null) src1, 2 src2 from <table2> b
group by CURRENCY_CODE, COUPON, INVESTMENT_TYPE
having count(src1) <> count(src2)
order by 1,2,3
See Ask Tom &quot;comparing two table data and logging the...&quot;
Similar Messages
-
Syntax of creating a stored procedure in Ms Access
I need to create a stored procedure in Ms Access and i need to create it via a java program .This is the query i have written
CREATE PROCEDURE procProductsList As
Select A.Id,B.L_Name from Transaction A,Member B where A.Id = B.Id and A.Id = [@emp] and A.Name = [@name].But when i try to run it i get an error as Syntax error in CREATE TABLE statement.Plz could sumone help.//Creates a stored procedure as a resultset
boolean createStoredProcedure(String strSql,Connection connect)
Statement stmt=null;
int columnCount=0;
try
if(connect.isClosed()==true)
return false;
else
stmt=connect.createStatement();
stmt.executeUpdate(strSql);
} //End else
} //End try
catch(SQLException sql)
System.out.print("Sql Exception caught");
sql.printStackTrace();
return false;
} //End catch
return true;
} //End function
//Function for passing the number of parameters in the parameters list
String getInvokeParamsList(Vector vector)
String strParamsInvokeList = new String("");
if(vector==null)
strParamsInvokeList=null;
else
strParamsInvokeList += "(";
for(int i=0; i < vector.size(); i++)
strParamsInvokeList += "?";
if(i < (vector.size() - 1))
strParamsInvokeList += ", ";
strParamsInvokeList += ")";
return strParamsInvokeList;
//Calls a stored Procedure
ResultSet callStoredProcedure(Connection connect,String strProcedureName,Vector vecValues)
ResultSet rs=null;
try
CallableStatement cs = connect.prepareCall("{call " + strProcedureName + getInvokeParamsList(vecValues) + "}");
for(int i=0;i<vecValues.size();i++)
cs.setString(i+1,(String)vecValues.get(i));
rs = cs.executeQuery();
catch(SQLException sql)
System.out.print("Sql Exception caught: " + sql.toString());
sql.printStackTrace();
catch(NullPointerException npexp)
System.out.print("NullPointerException Exception caught: " + npexp.toString());
npexp.printStackTrace();
return rs;//End catch
class database1
public static void main(String[] args)
try
String strFilepath="C:\\trainee";
String strFilename="config.xml";
String strvendor="TICPEN0001003";
String str1="CREATE PROCEDURE procProductsList As Select A.Id,B.L_Name from Transaction A,Member B where A.Id = B.Id and A.Id = [@emp] and A.Name = [@name]";
String proc="stproc";
int columnCount=0;
clsDatabase clsdb=new clsDatabase(strFilepath,strFilename,strvendor);
Connection boolConn=clsdb.getConnect();
Vector vec=new Vector();
if(boolConn!=null)
System.out.println("Connection established");
vec.add("3");
vec.add("Glove");
boolean b1=clsdb.createStoredProcedure(str1,boolConn);
if(b1==true)
ResultSet rs1=clsdb.callStoredProcedure(boolConn, proc, vec);
if(rs1==null)
System.out.println("rs1 null");
else
ResultSetMetaData rsmd = rs1.getMetaData();
columnCount = rsmd.getColumnCount();
while(rs1.next())
for(int i=1 ;i<=columnCount; i++)
String value=rs1.getString(i);
System.out.println(value);
else
System.out.print("Stored Procedure not created");
else
System.out.println("Connection not established");
catch(Exception e)
//System.out.println("Exception caught4: " + e.toString());
e.printStackTrace();
} //End catch
} //End main
} -
Can I create a Stored Procedure That access data from tables of another servers?
I'm developing a procedure and within it I'm trying to access another server and make a select into a table that belongs to this another server. When I compile this procedure I have this error message: " PLS-00904: insufficient privilege to access object BC.CADPAP", where BC.CADPAP is the problematic table.
How can I use more than one connection into an Oracle Stored Procedure?
How I can access tables of a server from a Stored Procedure since the moment I'm already connected with another server?
Can I create a Stored Procedure That access data from tables of another servers?You need to have a Database Link between two servers. Then you could do execute that statement without any problem. Try to create a database link with the help of
CREATE DATABASE LINK command. Refer Document for further details -
How to create a stored procedure that accepts an array of args from Java?
I am to be creating a stored procedure that accepts an array of arguments from Java. How to create this? thanks
SamNot a PL/SQL question really, but a Java one. The client call is done via ThinJDBC/OCI to PL/SQL, This call must be valid and match the parameters and data types of the PL/SQL procedure.
E.g. Let's say I define the following array (collection) structure in Oracle:
SQL> create or replace type TStrings as table of varchar2(4000);
Then I use this as dynamic array input for a PL/SQL proc:
create or replace procedure foo( string_array IN TStrings )...
The client making the call to PL/SQL needs to ensure that it passes a proper TStrings array structure.. The Oracle Call Interface (OCI) supports this on the client side - allowing the client to construct an OCI variable that can be passed as a TStrings data type to SQL. Unsure just what JDBC supports in this regard.
An alternative method, and a bit of a dirty hack, is to construct the array dynamically - but as this does not use bind variables, it is not a great idea.
E.g. the client does the call as follows: begin
foo( TStrings( 'Tom', 'Dick', 'Harry' ) );
end;Where the TStrings constructor is created by the client by stringing together variables to create a dynamic SQL statement. A bind var call would look like this instead (and scale much better on the Oracle server side):begin
foo( :MYSTRINGS );
end;I'm pretty sure these concepts are covered in the Oracle Java Developer manuals... -
Hi guys, I'm trying to create a Stored procedure that will automatically add all 3 After triggers when executed on any given database, can someone please explain and give an example on how do I go about doing this ? I'd also like it to raise any errors
that may come across, thanks in advance.Lets start with the question why do you need the triggers at all. Since SQL Server 2005 we can use an OUTPUT clause.
This code can be re-written in SQL Server 2005 using the OUTPUT clause like below:
create table itest ( i int identity not null primary key, j int not null unique )
create table #new ( i int not null, j int not null)
insert into itest (j)
output inserted.i, inserted.j into #new
select o.object_id from sys.objects as o
select * from #new
drop table #new, itest;
go
Now from this example, you can see the integration of OUTPUT clause with existing DML syntax.
Another common scenario is auditing of data in a table using triggers. In this case, the trigger uses information from the inserted and updated tables to add rows into the audit tables. The example below shows code that uses OUTPUT clause in UPDATE and DELETE
statements to insert rows into an audit table.
create table t ( i int not null );
create table t_audit ( old_i int not null, new_i int null );
insert into t (i) values( 1 );
insert into t (i) values( 2 );
update t
set i = i + 1
output deleted.i, inserted.i into t_audit
where i = 1;
delete from t
output deleted.i, NULL into t_audit
where i = 2;
select * from t;
select * from t_audit;
drop table t, t_audit;
go
Best Regards,Uri Dimant SQL Server MVP,
http://sqlblog.com/blogs/uri_dimant/
MS SQL optimization: MS SQL Development and Optimization
MS SQL Consulting:
Large scale of database and data cleansing
Remote DBA Services:
Improves MS SQL Database Performance
SQL Server Integration Services:
Business Intelligence -
Pointbase : How can I create a stored procedure with Pointbase database?
Hello,
Excuse me for my english, I'm not anglophone. I try to create a stored procedure.
This is my file SampleExternalMethods.java :
import java.sql.*; //import com.pointbase.jdbc.jdbcInOutDoubleWrapper; public class SampleExternalMethods { // A connection object to allow database callback static Connection conn = null; static Statement l_stmt; static Statement m_stmt; static CallableStatement m_callStmt = null; static ResultSet l_rs = null; public static void main(String[] args) { try { String url = "jdbc:pointbase:server://localhost/pointbaseDB"; String username = "PBPUBLIC"; String password = "PBPUBLIC"; conn = DriverManager.getConnection(url, username, password); doCreateProcedure(); doInvokeProcedure(); } catch (SQLException e) { e.printStackTrace(); } finally { if (m_stmt != null) { try { m_stmt.close(); } catch (Exception e) { e.printStackTrace(); } } if (m_callStmt != null) { try { m_callStmt.close(); } catch (Exception e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (Exception e) { e.printStackTrace(); } } } } public static void getCountry(String Iso_Code) { try { // Query the database for the country iso code l_stmt = conn.createStatement(); l_rs = l_stmt.executeQuery( "SELECT * FROM countries" + " WHERE country_iso_code ='" + Iso_Code + "'"); //Affichage du résultat de la requête l_rs.next(); System.out.print(l_rs.getString(1) + " - "); System.out.print(l_rs.getString(2) + " - "); System.out.println(l_rs.getString(3)); // Close the result set l_rs.close(); } catch (SQLException e) { e.printStackTrace(); } finally { if (l_rs != null) { try { l_rs.close(); } catch (Exception e) { e.printStackTrace(); } } if (l_stmt != null) { try { l_stmt.close(); } catch (Exception e) { e.printStackTrace(); } } } } public static void doCreateProcedure() throws SQLException { // SQL statement to create a stored procedure String SQL_CREATE_PROC = "CREATE PROCEDURE getCountry(IN P1 VARCHAR(30))" + " LANGUAGE JAVA" + " SPECIFIC getCountry" + " NO SQL" + " EXTERNAL NAME \"SampleExternalMethods::getCountry\"" + " PARAMETER STYLE SQL"; // Create a SQL statement m_stmt = conn.createStatement(); // Execute the SQL m_stmt.executeUpdate(SQL_CREATE_PROC); // Close the statement //m_stmt.close(); } public static void doInvokeProcedure() throws SQLException { // Create SQL to invoke stored procedures String SQL_USE_PROC = "{ call getCountry(?) }"; // Create a callable statement with three binding parameters m_callStmt = conn.prepareCall(SQL_USE_PROC); m_callStmt.setString(1, "CA"); m_callStmt.executeQuery(); // Close the callable statement //m_callStmt.close(); } }
Afterwards, I have read this note in a Pointbase document:
To invoke the dateConvert external Java method from a stored function, you must use the
CREATE FUNCTION statement. The dateConvert external Java method is called from the
class, SampleExternalMethods.
In order for the database to access this external Java method, the class SampleExternalMethods
must be included in the database CLASSPATH. For PointBase Embedded - Server Option, it
must be in the Server CLASSPATH, but not in the Client CLASSPATH.
If PointBase Server is run with the Java Security Manager, in the java policy file grant
’com.pointbase.sp.spPermission’ to the class that implements the external Java method.
An "spPermission" consists of a class name with no action. The class name is a name of a class
that could be used in creating a Stored Procedure in PointBase. The naming convention follows
the hierarchical property naming convention and that is supported by
"java.security.BasicPermission". An asterisk may appear by itself, or if immediately preceded
by ".", may appear at the end of the name, to signify a wildcard match. The name cannot
contain any white spaces.
I'm not sure, but I suppose that I must include the class SampleExternalMethods in a .jar file.
The database CLASSPATH could be : C:\Sun\AppServer\pointbase\lib\
These my files in this database CLASSPATH:
pbclient.jar
pbembedded.jar
pbtools.jar
pbupgrade.jar
I have tryed to include the class SampleExternalMethods in pbclient.jar and pbembedded.jar with this command:
jar -uf pbembedded.jar SampleExternalMethods
Afterwards I do that,
1) Start Pointbase
2) Configuration of classpath
set classpath=C:\Sun\AppServer\pointbase\lib\pbclient.jar
set classpath=%classpath%;D:\J2EE\Ch07Code\Ch07_06
I precise that my file SampleExternalMethods is into D:\J2EE\Ch07Code\Ch07_06\Ch07.
Then, I run the program:
D:\J2EE\Ch07Code\Ch07_06>java -Djdbc.drivers=com.pointbase.jdbc.jdbcUniversalDriver Ch07.SampleExternalMethods
But I have an error message:
Exception in thread "main" java.lang.NoClassDefFoundError: Ch07.SampleExternalMethods (wrong name: SampleExternalMethods)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.DefineClass(ClassLoader.java:539)
The problem, I suppose, comes from that the class SampleExternalMethods
must be included in the database CLASSPATH, but there is a pbserver.jar with pointbase normally, but I didn't find it. That's why I use pbembedded.jar or pbclient.jar in order to include the class SampleExternalMethods. May be I must start from C:\Sun\AppServer\pointbase\lib\ instead of D:\J2EE\Ch07Code\Ch07_06\Ch07?
Please, can somebody helps me?
Thank you in advance.
cagou!jschell wrote:
And I doubt you can recurse like that for embedded java. You must have a class that does the functionality and another class that creates the proc.
>And I doubt you can recurse like that for embedded java. You must have a class that does the functionality and another class that creates the proc.
>
And I doubt you can recurse like that for embedded java. You must have a class that does the functionality and another class that creates the proc.
Thank you for your response, I have done two classes:
SampleExternalMethods.java:
package Ch07;
import java.sql.*;*
*public class SampleExternalMethods*
*public static void getCountry(String Iso_Code)*
*// A connection object to allow database callback*
*Connection l_conn = null;*
*Statement l_stmt = null;*
*ResultSet l_rs = null;*
*try*
*String url = "jdbc:pointbase:server://localhost/pointbaseDB";*
*String username = "PBPUBLIC";*
*String password = "PBPUBLIC";*
*l_conn = DriverManager.getConnection(url, username, password);*
*// Query the database for the country iso code*
*l_stmt = l_conn.createStatement();*
*l_rs = l_stmt.executeQuery( "SELECT* FROM PBPUBLIC.COUNTRIES"
+" WHERE country_iso_code ='"+ Iso_Code +"'");+
+//Affichage du résultat de la requête+
+l_rs.next();+
+System.out.print(l_rs.getString(1)+ " - ");
System.out.print(l_rs.getString(2) +" - ");+
+System.out.println(l_rs.getString(3));+
+// Close the result set+
+l_rs.close();+
+} catch (SQLException e) {+
+e.printStackTrace();+
+} finally {+
+if (l_rs != null) {+
+try {+
+l_rs.close();+
+} catch (Exception e) {+
+e.printStackTrace();+
+}+
+}+
+if (l_stmt != null) {+
+try {+
+l_stmt.close();+
+} catch (Exception e) {+
+e.printStackTrace();+
+}+
+}+
+if (l_conn != null) {+
+try {+
+l_conn.close();+
+} catch (Exception e) {+
+e.printStackTrace();+
+}+
+}+
+}+
+}+
+}+
CreateMethods.java:
+package Ch07;+
+import java.sql.*;+
+public class CreateMethods+
+{+
+// A connection object to allow database callback+
+static Connection m_conn = null;+
+static Statement m_stmt;+
+static CallableStatement m_callStmt = null;+
+public static void main(String[] args)+
+{+
+try+
+{+
+String url = "jdbc:pointbase:server://localhost/pointbaseDB";+
+String username = "PBPUBLIC";+
+String password = "PBPUBLIC";+
+m_conn = DriverManager.getConnection(url, username, password);+
+doCreateProcedure();+
+doInvokeProcedure();+
+} catch (SQLException e) {+
+e.printStackTrace();+
+} finally {+
+if (m_stmt != null) {+
+try {+
+m_stmt.close();+
+} catch (Exception e) {+
+e.printStackTrace();+
+}+
+}+
+if (m_callStmt != null) {+
+try {+
+m_callStmt.close();+
+} catch (Exception e) {+
+e.printStackTrace();+
+}+
+}+
+if (m_conn != null) {+
+try {+
+m_conn.close();+
+} catch (Exception e) {+
+e.printStackTrace();+
+}+
+}+
+}+
+}+
+public static void doCreateProcedure() throws SQLException {+
+// SQL statement to create a stored procedure+
+String SQL_CREATE_PROC = "CREATE PROCEDURE PBPUBLIC.getCountry(IN P1 VARCHAR(30))"+
" LANGUAGE JAVA"
+" SPECIFIC getCountry"+
" NO SQL"
+" EXTERNAL NAME \"SampleExternalMethods::getCountry\""+
" PARAMETER STYLE SQL";
// Create a SQL statement
m_stmt = m_conn.createStatement();
// Execute the SQL
m_stmt.executeUpdate(SQL_CREATE_PROC);
// Close the statement
//m_stmt.close();
public static void doInvokeProcedure() throws SQLException {
// Create SQL to invoke stored procedures
String SQL_USE_PROC = "{ call getCountry(?) }";
// Create a callable statement with three binding parameters
m_callStmt = m_conn.prepareCall(SQL_USE_PROC);
m_callStmt.setString(2, "CA");
m_callStmt.executeQuery();
// Close the callable statement
//m_callStmt.close();
}But I have the same error message that previously.
I have read this note and I suppose that the problem is linked:
If PointBase Server is run with the Java Security Manager, in the java policy file grant
*com.pointbase.sp.spPermission to the class that implements the external Java method.*
An "spPermission" consists of a class name with no action. The class name is a name of a class
that could be used in creating a Stored Procedure in PointBase. The naming convention follows
the hierarchical property naming convention and that is supported by
*"java.security.BasicPermission". An asterisk may appear by itself, or if immediately preceded*
by ".", may appear at the end of the name, to signify a wildcard match. The name cannot
contain any white spaces.
Can you explain me what I must to do in order to solve this problem of spPermission.
Thanks. -
Problems in creating RLANG stored procedure in HANA studio
Hi,
While I am creating a stored procedure (using .hdbprocedure file) in HANA studio with language as RLANG, I am getting an error message like this: "It is not supported to use another language than sqlscript".
I have the following setting configured.
HANA System -> Administration -> Configuration ->indexserver.ini -> repository -> sqlscript_mode = UNSECURE
Any clues will be appreciated.
Best Regards
SuryaHI Raj,
This happens even for the empty procedure as following
PROCEDURE "IDMANALYTICS_OPER"."idmanalytics.hana.db.hdbprocedures::MC_ROLEMINING_CLUSTERING_R" ( )
LANGUAGE RLANG
SQL SECURITY INVOKER
READS SQL DATA AS
BEGIN
Write your procedure logic
END;
The procedure that I wanted to write is following.
PROCEDURE MC_ROLEMINING_CLUSTERING_R(IN rolemining_input "_SYS_BIC"."idmanalytics.hana.db.views/MC_ROLEMINING_VINPUT",
IN params "IDMANALYTICS_DB"."idmanalytics.hana.db.hdbtables::MC_ROLEMINING_PARAMETER",
OUT result MC_ROLEMINING_CLUSTERS_TYPE,
OUT result_hierarchy MC_ROLEMINING_HIERARCHY_TYPE,
OUT result_userorder MC_ROLEMINING_USERORDER_TYPE
LANGUAGE RLANG AS
BEGIN
noofclusters <- params$INT_VALUE[1];
simindex <- params$DOUBLE_VALUE[2];
distancemethod="jaccard"
clusteringmethod="complete"
usercol <- rolemining_input$USER_ID
privcol <- rolemining_input$PRIV_ID
#--generate user-permission matrix from user-permission table
uptable <- data.frame(users = usercol, privileges = privcol)
uniqueusers <- sort(unique(uptable$users))
uniqueprivileges <- sort(unique(uptable$privileges))
upmatrixdata <- vector()
index <- 0
for(i in uniqueusers )
for(j in uniqueprivileges) {
row_to_find <- data.frame(users=i, privileges = j)
if(duplicated(rbind(uptable, row_to_find))[nrow(uptable)+1]){
upmatrixdata <- append(upmatrixdata, 1, after = index)
else {
upmatrixdata <- append(upmatrixdata, 0, after = index)
index <- index +1
upmatrix <- matrix(
upmatrixdata ,
nrow = length(uniqueusers),
ncol = length(uniqueprivileges),
byrow = TRUE,
dimnames = list(
uniqueusers,
uniqueprivileges
#--apply hierarchical clustersing
require(vegan)
distance<-vegdist(upmatrix,method=distancemethod)
clusters<-hclust(distance,method=clusteringmethod)
#--fill clusters for given h and k
if(noofclusters > 0){
userclusters<-cutree(clusters,k=noofclusters)
tempresult <- as.data.frame(userclusters)
result <- data.frame(USER_ID=row.names(tempresult), CLUSTER_ID=tempresult$userclusters)
if(noofclusters <= 0 & simindex >= 0){
userclusters<-cutree(clusters,h=simindex)
tempresult <- as.data.frame(userclusters)
result <- data.frame(USER_ID=row.names(tempresult), CLUSTER_ID=tempresult$userclusters)
#--fill role hierarchy
clusters_merge <- as.data.frame(clusters$merge)
clusters_height <- clusters$height
clusters_order <- clusters$order
result_hierarchy <- data.frame(HEIGHT=clusters_height, V1=clusters_merge$V1, V2=clusters_merge$V2)
#--fill user order
clusters_order <- clusters$order
result_userorder <- data.frame(USERORDER=clusters_order)
END; -
How to create a stored procedure and use it in Crystal reports
Hi All,
Can anyone explain me how to create a stored procedure and use that stored procedure in Crystal reports. As I have few doubts in this process, It would be great if you can explain me with a small stored proc example.
Thanks in advance.If you are using MSSQL SERVER then try creating a stored procedure like this
create proc Name
select * from Table
by executing this in sql query analyzer will create a stored procedure that returns all the data from Table
here is the syntax to create SP
Syntax
CREATE PROC [ EDURE ] procedure_name [ ; number ]
[ { @parameter data_type }
[ VARYING ] [ = default ] [ OUTPUT ]
] [ ,...n ]
[ WITH
{ RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]
[ FOR REPLICATION ]
AS sql_statement [ ...n ]
Now Create new report and create new connection to your database and select stored procedure and add it to the report that shows all the columns and you can place the required fields in the report and refresh the report.
Regards,
Raghavendra
Edited by: Raghavendra Gadhamsetty on Jun 11, 2009 1:45 AM -
ERP2005 SR3 Create SAP Stored Procedures Error
Hi Seniors,
I have tried to install SAP ERP ECC 6.0 IDES ERP2005 SR3 , I got the error in installation step 19/26 (Create SAP Stored Procedures).
OS : WIN 2008 SERVER
DB : MS SQL 2008
I have fallow the Note 1152240.
Error log :
ERROR 2010-03-02 12:08:20.282
FCO-00011 The step ExeProcs with step key |NW_Onehost|ind|ind|ind|ind|0|0|NW_Onehost_System|ind|ind|ind|ind|2|0|NW_CreateDBandLoad|ind|ind|ind|ind|10|0|NW_Postload|ind|ind|ind|ind|10|0|NW_Postload_MSS|ind|ind|ind|ind|2|0|MssProcs|ind|ind|ind|ind|1|0|ExeProcs was executed with status ERROR .
Please help me,
Thank you,
Sagar K> I have tried to install SAP ERP ECC 6.0 IDES ERP2005 SR3 , I got the error in installation step 19/26 (Create SAP Stored Procedures).
>
> OS : WIN 2008 SERVER
> DB : MS SQL 2008
See note 1244548 - IDES ERP 6.0 ECC 6.0 SR3:
<...>
Microsoft SQL Server 2008:
An Installation of this IDES version on MSSQL 2008 is NOT possible.
Please use MSSQL 2005 as database version
<...>
The reason is that the SAP_BASIS support package is too low.
Markus -
How to create a stored procedure in a dynamic schema
Hi,
I want to create a stored procedure in a dynamic shcema (schema name will be known at run time). Can any one guide me on this.
I tried using define var1=schema1; and then in create or replace procedure &var1.porcName( ) but it is not working
ThanksSQL> alter session set current_schema=<my schema>;
Now create the stored procedure. It will be created in the session's current schema. -
Beginner - trying to create a stored procedure.
I want to create a stored procedure, where the person calling the procedure only has to up date the date_key :
The procedure is just creating a table and will be ran every couple days.
Create or replace procedure WklyHVCReport (date_transaction number)
Is
Begin
EXECUTE_IMMEDIATE
create table reporting_dept.HVC_Weekly
as
select a.msisdn, sum(d.amt_gross * -1.0) as Amt
from clarity_mis.dim_subscriber_vw a
join clarity_mis.dim_customer_account_vw b on a.customer_account_id = b.customer_account_id
join clarity_mis.fact_balance_transaction_vw c on a.subscriber_key = c.subscriber_key
join clarity_mis.dim_transaction_vw d on c.transaction_key = d.transaction_key
where a.flag_is_last_msisdn_owner = 'Y'
and a.sub_base_group = 'ACTIVE'
and (b.data_protection != 'No Contact Preferred' or b.data_protection is null)
and c.date_transaction_key >= || date_transaction ||
and d.transaction_sub_cat = 'Purchased Credit'
group by a.msisdn having sum(d.amt_gross * -1.0) >= 80
end;
I keep getting this error,
Error(6,1): PLS-00103: Encountered the symbol "?" when expecting one of the following: := . ( @ % ;
- can you point me in the right direction ?Hello
Sorry to jump in but I think it would be worth you having a look at packages. Packages allow you to group together stored procedures and functions that have a common purpose - similar idea to libraries, DLL etc.
In your example, if you have several different reports for HVC (I'm making a big guess that HVC has some sort of relevance to the business or a peice of software), you could have a sinlge package that contains all of them. They are then logically grouped and you can potentially share logic between them.
A package is formed of a specification and a body. In the specification you are defining procedures that are "publicly" callable and in the body you are writing the implementation of those procedures.
You can also specify procedures that can only be called within the package body and are not visible outside. So for example if you wanted to log how often each report is run and by whom, you could have a procedure only declared in the body that will record those details in a separate table.
CREATE TABLE hvc_report_log
( report_name VARCHAR2(100) NOT NULL,
username VARCHAR2(30) NOT NULL,
used_date DATE NOT NULL
--This is the specification
CREATE OR REPLACE PACKAGE hvcreports
AS
PROCEDURE p_Weekly (date_transaction number);
PROCEDURE p_Monthly (date_transaction number);
END;
--This is the implementation in the body.
CREATE OR REPLACE PACKAGE BODY hvcreports
AS
--This procedure can only be called from within the package body
PROCEDURE p_LogUsage( p_report_name hvc_report_log.report_name%TYPE)
IS
BEGIN
INSERT
INTO
hvc_report_log
( report_name,
username,
used_date
VALUES
( p_report_name,
USER, --Built in function that returns
--the currently logged in oracle user
SYSDATE --Returns the current date and time
END;
PROCEDURE p_Weekly (date_transaction number)
IS
begin
p_LogUsage('hvc_weekly');
insert into hvc_weekly (msisdn, amt)
select a.msisdn,
sum (d.amt_gross * -1.0) as amt
from clarity_mis.dim_subscriber_vw a
join clarity_mis.dim_customer_account_vw b
on a.customer_account_id = b.customer_account_id
join clarity_mis.fact_balance_transaction_vw c
on a.subscriber_key = c.subscriber_key
join clarity_mis.dim_transaction_vw d
on c.transaction_key = d.transaction_key
where a.flag_is_last_msisdn_owner = 'Y'
and a.sub_base_group = 'ACTIVE'
and (b.data_protection != 'No Contact Preferred'
or b.data_protection is null)
and c.date_transaction_key >= date_transaction
and d.transaction_sub_cat = 'Purchased Credit'
group by a.msisdn
having sum (d.amt_gross * -1.0) >= 80;
end ;
PROCEDURE p_Monthly (date_transaction number)
IS
begin
p_LogUsage('hvc_monthly');
insert into hvc_monthly (msisdn, amt)
select a.msisdn,
sum (d.amt_gross * -1.0) as amt
from clarity_mis.dim_subscriber_vw a
join clarity_mis.dim_customer_account_vw b
on a.customer_account_id = b.customer_account_id
join clarity_mis.fact_balance_transaction_vw c
on a.subscriber_key = c.subscriber_key
join clarity_mis.dim_transaction_vw d
on c.transaction_key = d.transaction_key
where a.flag_is_last_msisdn_owner = 'Y'
and a.sub_base_group = 'ACTIVE'
and (b.data_protection != 'No Contact Preferred'
or b.data_protection is null)
and c.date_transaction_key >= date_transaction
and d.transaction_sub_cat = 'Purchased Credit'
group by a.msisdn
having sum (d.amt_gross * -1.0) >= 80;
end ;
END;
/You can then call them in pretty much the same way as with stand alone stored procedures
BEGIN
hvcreports.p_Weekly(1);
hvcreports.p_Monthly(1);
END;
EXEC hvcreports.p_Weekly(1);
EXEC hvcreports.p_Monthly(1);Hopefully I've not muddied the water too much. Here's some links to the documentation...
Documentation hope page for 11gR2
http://www.oracle.com/pls/db112/homepage
PL/SQL language reference
http://download.oracle.com/docs/cd/E11882_01/appdev.112/e25519/toc.htm
PL/SQL development guide
http://download.oracle.com/docs/cd/E11882_01/appdev.112/e10766/toc.htm
SQL Language reference
http://download.oracle.com/docs/cd/E11882_01/server.112/e26088/toc.htm
HTH
David -
How to use dynamic parameter when a report is created using Stored Procedures
Hi all,
any one have the idea of how to use dynamic parameter in crystal report XI R2
when report is created using Stored Procedure.
Regards
shashi kant chauhanHi
You can create an SQL command in Database Expert > Expand your datasource > Add command
Then enter the SQL query that will create the list of values to supply to the user
eg select field1,field2 from table
Then edit the parameter of the report. These will be the SP parameters adn can be seen in field explorer.
Change the parameter type to Dynamic
Under the word Value click on Click here to add item
Scroll down to your Command and select one of the values that you want to appear in the list
e.g field1
Then click on the Parameters field - this is essential to create the param
You can edit other options as required
That should do it for you.
I must say that i use CR 2008 connected to Oracle 10g SP, but i reckon this will work for SQL DB and CR XI as well
Best of luck -
How to Create a Stored Procedure
Hi,
how can we create a new stored procedure using a text editor and the saving it as a file. Please assume that i am just a beginner with oracle.You can create the stored procedure in a text editor, then run the saved file via SQL*Plus. If you have saved the file you can use the @ symbol to have Oracle run the script.
c:\> sqlplus <<user name>>/<<password>>@<<TNS alias>>
SQL> @<<path to file>>will start SQL*Plus and run the script you just created.
Justin
Distributed Database Consulting, Inc.
http://www.ddbcinc.com/askDDBC -
How to create java stored procedure from oracle(Dastageer)
how to create java stored procedure from oracle-please help me to create the procedure.
Hi,
This forum is exclusively for discussions related to Sun Java Studio Creator. Please post your question in the appropriate forum.
Thanks,
RK. -
Need Help With a Stored Procedure
Help With a Stored Procedure
Hi everyone.
I am quite new relative to creating stored procedures, so I anticipate that whatever help I could get here would be very much helpful.
Anyway, here is my case:
I have a table where I need to update some fields with values coming from other tables. The other tables, let us just name as tblRef1, tblRef2 and tblRef3. For clarity, let us name tblToUpdate as my table to update. tblToUpdate has the following fields.
PlanID
EmployeeIndicator
UpdatedBy
CreatedBy
tblRef1, tblRef2 and tblRef3 has the following fields:
UserName
EmpIndicator
UserID
In my stored procedure, I need to perform the following:
1. Check each row in the tblToUpdate table. Get the CreatedBy value and compare the same to the UserName and UserID field of tblRef1. If no value exists in tblRef1, I then proceed to check if the value exists in the same fields in tblRef2 and tblRef3.
2. If the value is found, then I would update the EmployeeIndicator field in tblToUpdate with the value found on either tblRef1, tblRef2 or tblRef3.
I am having some trouble writing the stored procedure to accomplish this. So far, I have written is the following:
CREATE OR REPLACE PROCEDURE Proc_Upd IS v_rec NUMBER;
v_plan_no tblToUpdate.PLANID%TYPE;
v_ref_ind tblToUpdate.EMPLOYEEINDICATOR%TYPE;
v_update_user tblToUpdate.UPDATEDBY%TYPE;
v_created_by tblToUpdate.CREATEDBY%TYPE;
v_correct_ref_ind tblToUpdate.EMPLOYEEIDICATOR%TYPE;
CURSOR cur_plan IS SELECT PlanID, EmployeeIndicator, UPPER(UpdatedBy), UPPER(CreatedBy) FROM tblToUpdate;
BEGIN
Open cur_plan;
LOOP
FETCH cur_plan INTO v_plan_no, v_ref_ind, v_update_user, v_created_by;
EXIT WHEN cur_plan%NOTFOUND;
BEGIN
-- Check if v_created_by has value.
IF v_created_by IS NOT NULL THEN
-- Get the EmpIndicator from the tblRef1, tblRef2 or tblRef3 based on CreatedBy
SELECT UPPER(EmpIndicator)
INTO v_correct_ref_ind
FROM tblRef1
WHERE UPPER(USERNAME) = v_created_by
OR UPPER(USERID) = v_created_by;
IF v_correct_ref_ind IS NOT NULL THEN
-- Update the Reference Indicator Field in the table TRP_BUSPLAN_HDR_T.
UPDATE TRP_BUSPLAN_HDR_T SET ref_ind = v_correct_ref_ind WHERE plan_no = v_plan_no;
ELSIF
-- Check the Other tables here????
END IF;
ELSIF v_created_by IS NULL THEN
-- Get the EmpIndicator based on the UpdatedBy
SELECT UPPER(EmpIndicator)
INTO v_correct_ref_ind
FROM tblRef1
WHERE UPPER(USERNAME) = v_update_user
OR UPPER(USERID) = v_created_by;
IF v_correct_ref_ind IS NOT NULL THEN
-- Update the Reference Indicator Field in the table TRP_BUSPLAN_HDR_T.
UPDATE TRP_BUSPLAN_HDR_T SET ref_ind = v_correct_ref_ind WHERE plan_no = v_plan_no;
ELSIF
-- Check the Other tables here????
END IF;
END IF;
END;
END LOOP;
CLOSE cur_plan;
COMMIT;
END
Please take note that the values in the column tblToUpdate.UpdatedBy or tblToUpdate.CreatedBy could match either the UserName or the UserID of the table tblRef1, tblRef2, or tblRef3.
Kindly provide more insight. When I try to execute the procedure above, I get a DATA NOT FOUND ERROR.
Thanks.Ah, ok; I got the updates the wrong way round then.
BluShadow's single update sounds like what you need then.
I also suggest you read this AskTom link to help you see why you should choose to write DML statements before choosing to write cursor + loops.
In general, when you're being asked to update / insert / delete rows into a table or several tables, your first reaction should be: "Can I do this in SQL?" If you can, then putting it into a stored procedure is usually just a case of putting the sql statement inside the procedure header/footers - can't really get much more simple than that! *{;-)
Maybe you are looking for
-
Status of PO becomes F in fund management
Hi, recently we have upgrade SAP from ECC6 to EHP4 and found some of the PO's Status becomes F in fund management, so we are not able to make service entry sheet and payment as system asking for further budget though actually POs value has not reduce
-
We are getting the below error when we see in Crawl logs "The crawler could not communicate with the server. Check that the server is available and that the firewall access is configured correctly. If the repository was temporarily unavailable, an in
-
Why does my ipod only show an apple and wont start up
Why does my Ipod only show an apple and wont do anything else> And holding down the two buttons has done nothing!
-
Error when creating link to documents from material
Hi all, while creating the purchase order the error message "Error when creating link to documents from material 61260224060" is displayed. why this error message is displayed.? Regards, GaneshRaja
-
Images overlap with text when after creating pdf: InDesign CS
Good morning, I am using bot InDesign CS and CS2, and I am having a problem as the following: After creating the pdf, images overlap with one another, or the text overlap behind the images so on. First, I would like to mention the overlapped images h