Static variables in CLR stored procedures

Is there really no way to use static variables shared by several CLS stored procedures in the same DLL, except by making them read only?
Or can you add new server variables and read/write those from CLR stored procedures without having to open a connection and run a query each time you need a value?
In my SP's, I would like to know the path where the database's .mdf file is stored on disk (not to access that file, but to store other files in a location that's always the same relative to the database).
I thought I had found the solution last week, after some digging through sites like stackoverflow: make it a static read-only variable, and initialize it through a function call when the module is loaded.  The CLR will "forget" that it is
read only at that time.
For some reason this has worked perfectly for a week, but today it suddenly started failing -- without any code change or even a recompile, it started after a simple reboot of the test machine.
The code (just the relevant lines, in VB syntax):
Private Shared ReadOnly Datapath As String = InitDataPath()
Private Shared Function InitDataPath() As String
Try
Using cn As New SqlConnection("context connection=true"),
cmd As New SqlCommand("SELECT TOP 1 [physical_name] FROM sys.database_files WHERE type=0", cn)
cn.Open()
The "cn.open" line throws "Data access is not allowed in this context."
It did not yet do that yesterday, and the day before, and all the way back to January 6th, when I wrote that piece of code.  The DLL hadn't even been recompiled since then, I was working on the application that uses the database and the stored procedures.

I think I found it, at least it works again -- I just hope it's for more than a week now.
Declare assembly as unsafe when installing it in SQL server (it was already 'EXTERNAL_ACCESS' for file I/O, but non-read-only static variables require UNSAFE).
I initialize the static variables to 'Nothing' (NULL for C# users), and instead of finding the path when the module is loaded, I added a line 'if xxx is nothing then init()' at the start of each procedure / function. Init() is a a simple initialization
routine that initializes the static variables upon first access.
added SystemDataAccess:=DataAccessKind.Read to the declaration of UDF's (not possible and not necessary for procedures, apparently, but if what caused the assembly to load was a function, it would still fail).

Similar Messages

  • 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

  • Deserialization permissions error in CLR stored procedure

    Environment: SQL Server 2008 R2 standard edition and VS2010, .Net Framework 3.5
    I've got a table with a varbinary column that contains a serialized Hashtable. I'm writing a CLR stored procedure that, given the contents of such a field from a row in the table, does a lookup on a key in the Hashtable. and returns the element's value.
    To get the Hashtable, I need to deserialize it, and it appears that the BinaryFormatter's Deserialize function requires certain permissions that I don't know how to grant.
    This SQL Server instance runs on my own development machine, and was installed pretty much with all defaults. I'm the owner.
    Any help on solving this? I should point out while I write a fair amount of SQL and a LOT of VB, I'm far from a SQL Server expert, so if you have suggestions I'd appreciate it if you'd spell things out clearly for me.
    Thanks in advance for any help,
    Tom
    Here's a fragment from the VB source:
        ' the bytes variable is defined as Byte()
        Dim ms As MemoryStream = New MemoryStream()
        ms.Write(bytes, 0, bytes.Length)
        ms.Seek(0, 0)
        Dim formatter As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter()
        Dim oHT As Object = formatter.Deserialize(ms)    'hurls here
    The CREATE ASSEMBLY statement had WITH PERMISSION_SET = SAFE. I tried it with UNSAFE, and got this error:
    CREATE ASSEMBLY for assembly 'ddmi.deep.data.sqlserver' failed because assembly 'ddmi.deep.data.sqlserver' is not authorized for PERMISSION_SET = UNSAFE.  The assembly is authorized when either of the following is true: the database owner (DBO) has
    UNSAFE ASSEMBLY permission and the database has the TRUSTWORTHY database property on; or the assembly is signed with a certificate or an asymmetric key that has a corresponding login with UNSAFE ASSEMBLY permission.
    Here's an SQL script that runs it:
    declare
        @id int
      , @raw_req_bin varbinary(1500)
      , @value nvarchar(max)
    set @id = 327
    set @raw_req_bin = (select raw_req_bin from dp_payment where transaction_id = @id)
    set @value = dbo.dp_fx_hash_table_lookup(@raw_req_bin, 'first_name')
    and here's what I get when I run the script:
    SecurityExceptionSystem.Security.SecurityException: Request for the permission of type 'System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
       at System.Security.CodeAccessSecurityEngine.SpecialDemand(PermissionType whatPermission, StackCrawlMark& stackMark)
       at System.Security.CodeAccessPermission.DemandInternal(PermissionType permissionType)
       at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)
       at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)
       at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream)
       at ddmi.deep.data.sqlserver.UserDefinedFunctions.AsHashTable(Byte[] bytes, String& phase)
    The action that failed was:
    Demand
    The type of the first permission that failed was:
    System.Security.Permissions.SecurityPermission
    The Zone of the assembly that failed was:
    MyComputer

    Set the database (in a test system) to trustworthy (ALTER DATABSE foo SET TRUSTWORTHY ON) for testing. If this works, look into code signing (sign an assembly and catalog the cert/asymmetric key to master) for production. If you have problems with
    "native" serialization, you might get better results using XML serializers.
    Re: XML serializers. SQLCLR will not load dynamically generated serializers. So you need to pregenerate XML serializers with sgen.exe.
    Your specific error message (the permission error) might be fixed by cataloging the SQLCLR assembly as UNSAFE. If that doesn't work, you might attempt to change the .NET permission configuration on your machine using either of the tools described here:
    http://msdn.microsoft.com/en-us/library/7c9c2y1w(v=vs.90).aspx
    Hope this helps, Cheers, Bob

  • Calling Managed CLR Stored Procedure from C++ SQL Server 2008 fails with Msg 2809

    I am trying to call a stored procedure from C++ (VS 2010).
    Here is what the stored procedure looks like:
    public class Validate
    [Microsoft.SqlServer.Server.SqlProcedure(Name = "ClientTest")]
    public static void ClientTest(out String res )
    { res = "50";}
    To create a stored procedure I deploy at first the assembly
    USE [test]
    GO
    CREATE ASSEMBLY ClientTestAssembly
    AUTHORIZATION testLogin
    FROM 'C:\Users\test\Documents\Visual Studio 2010\Projects\TestCreationAssemblyCSharp\TestCreationAssemblyCSharp\bin\x64\Debug\TestCreationAssemblyCSharp.dll'
    and call 
    USE test
    GO
    CREATE PROCEDURE ClientTest (@res NVARCHAR(40) OUTPUT)
    AS
    EXTERNAL NAME ClientTestAssembly.Validate.ClientTest
    I can call my procedure direct in SQL Server Management Studio without any errors
    declare @res nvarchar(10)
    execute ClientTest @res OUTPUT
    print @res
    But when I try to call this procedure from C++ using CALL syntax
    SQLBindParameter(sqlstatementhandle, 1, SQL_PARAM_OUTPUT, SQL_C_CHAR,
    SQL_VARCHAR , 40, 0, version, sizeof(version) ,
    &pcbValue);
    res = SQLExecDirect(sqlstatementhandle, (SQLCHAR*)("{CALL ClientTest(?) }"), SQL_NTS);
    I get the Error 2809 with SQLSTATE 42000 and with statement 
    The request for 'ClientTest'
    (procedure) failed because 'ClientTest' is a procedure object.
    However, if I wrap my CLR stored procedure into a T-SQL stored procedure, like
    CREATE PROCEDURE myProc (@res NVARCHAR(40) OUTPUT)
    AS
    EXEC ClientTest @res OUTPUT
    and call then myProc instead of ClientTest
    res = SQLExecDirect(sqlstatementhandle, (SQLCHAR*)("{CALL myProc(?) }"), SQL_NTS);
    everithing works fine and I get 50 as result.
    I have no ideas what is the reason for that behavior.
    Thanks very much for any suggestion. 
    Christina

    I'm not an ODBC expert, but you might try following the sample here:
    Process Return Codes and Output Parameters (ODBC)
    To see if it also behaves differently for your CLR proc.
    David
    David http://blogs.msdn.com/b/dbrowne/

  • How to use OUT variables in my stored procedure

    I'm wondering if I can get some help using OUT variables in my stored procedure. Here's my code...
    CREATE OR REPLACE PROCEDURE testProj.testProcedure (
         v_segment_id IN VARCHAR2,
         v_student_id OUT VARCHAR2,
         v_current_code OUT NUMBER,
         v_new_code OUT NUMBER
    ) AS
    BEGIN
         SELECT
              s.student_id,
              s.quad_code_id,
              nc.quad_code_id
         INTO
              v_student_id,
              v_current_quad_code,
              v_new_quad_code
         FROM testProj.students s
         INNER JOIN testProj.new_codes nc ON s.student_id = nc.student_id
         WHERE s.segment_id = v_segment_id ;
    END testProcedure ;
    EXECUTE testProj.testProcedure ('44') ;
    When I execute that stored procedure with the above execute statement, I get this error:
    Error report:
    ORA-06550: line 1, column 7:
    PLS-00306: wrong number or types of arguments in call to 'testProcedure'
    ORA-06550: line 1, column 7:
    PL/SQL: Statement ignored
    +06550. 00000 - "line %s, column %s:\n%s"+
    *Cause:    Usually a PL/SQL compilation error.+
    *Action:+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   

    Using Refcursor is one way you can do that ->
    satyaki>
    satyaki>select * from v$version;
    BANNER
    Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Prod
    PL/SQL Release 10.2.0.3.0 - Production
    CORE    10.2.0.3.0      Production
    TNS for 32-bit Windows: Version 10.2.0.3.0 - Production
    NLSRTL Version 10.2.0.3.0 - Production
    Elapsed: 00:00:00.21
    satyaki>
    satyaki>
    satyaki>create or replace procedure r_arg(
      2                                      choice in number,
      3                                      b in out sys_refcursor
      4                                   )
      5  is  
      6    str   varchar2(500);
      7  begin   
      8     str := 'select * from emp';   
      9     open b for str;
    10  exception  
    11    when others then     
    12      dbms_output.put_line(sqlerrm);
    13  end;
    14  /
    Procedure created.
    Elapsed: 00:00:01.84
    satyaki>
    satyaki>
    satyaki>declare   
      2    rec_x emp%rowtype;   
      3    w sys_refcursor;
      4  begin  
      5    dbms_output.enable(1000000);  
      6    r_arg(1,w);  
      7    loop    
      8      fetch w into rec_x;     
      9        exit when w%notfound;             
    10        dbms_output.put_line('Employee No: '||rec_x.empno||' - '||                          
    11                             'Name: '||rec_x.ename||' - '||                          
    12                             'Job: '||rec_x.job||' - '||                          
    13                             'Manager: '||rec_x.mgr||' - '||                          
    14                             'Joining Date: '||rec_x.hiredate||' - '||                          
    15                             'Salary: '||rec_x.sal||' - '||                          
    16                             'Commission: '||rec_x.comm||' - '||                          
    17                             'Department No: '||rec_x.deptno);  
    18     end loop;  
    19     close w;    
    20  exception  
    21    when others then    
    22       dbms_output.put_line(sqlerrm);
    23  end;
    24  /
    Employee No: 9999 - Name: SATYAKI - Job: SLS - Manager: 7698 - Joining Date: 02-NOV-08 - Salary: 55000 - Commission: 3455 - Department No: 10
    Employee No: 7777 - Name: SOURAV - Job: SLS - Manager:  - Joining Date: 14-SEP-08 - Salary: 45000 - Commission: 3400 - Department No: 10
    Employee No: 7521 - Name: WARD - Job: SALESMAN - Manager: 7698 - Joining Date: 22-FEB-81 - Salary: 1250 - Commission: 500 - Department No: 30
    Employee No: 7566 - Name: JONES - Job: MANAGER - Manager: 7839 - Joining Date: 02-APR-81 - Salary: 2975 - Commission:  - Department No: 20
    Employee No: 7654 - Name: MARTIN - Job: SALESMAN - Manager: 7698 - Joining Date: 28-SEP-81 - Salary: 1250 - Commission: 1400 - Department No: 30
    Employee No: 7698 - Name: BLAKE - Job: MANAGER - Manager: 7839 - Joining Date: 01-MAY-81 - Salary: 2850 - Commission:  - Department No: 30
    Employee No: 7782 - Name: CLARK - Job: MANAGER - Manager: 7839 - Joining Date: 09-JUN-81 - Salary: 4450 - Commission:  - Department No: 10
    Employee No: 7788 - Name: SCOTT - Job: ANALYST - Manager: 7566 - Joining Date: 19-APR-87 - Salary: 3000 - Commission:  - Department No: 20
    Employee No: 7839 - Name: KING - Job: PRESIDENT - Manager:  - Joining Date: 17-NOV-81 - Salary: 7000 - Commission:  - Department No: 10
    Employee No: 7844 - Name: TURNER - Job: SALESMAN - Manager: 7698 - Joining Date: 08-SEP-81 - Salary: 1500 - Commission: 0 - Department No: 30
    Employee No: 7876 - Name: ADAMS - Job: CLERK - Manager: 7788 - Joining Date: 23-MAY-87 - Salary: 1100 - Commission:  - Department No: 20
    Employee No: 7900 - Name: JAMES - Job: CLERK - Manager: 7698 - Joining Date: 03-DEC-81 - Salary: 950 - Commission:  - Department No: 30
    Employee No: 7902 - Name: FORD - Job: ANALYST - Manager: 7566 - Joining Date: 03-DEC-81 - Salary: 3000 - Commission:  - Department No: 20
    PL/SQL procedure successfully completed.
    Elapsed: 00:00:00.48
    satyaki>
    satyaki>Regards.
    Satyaki De.

  • Transpose Data in CLR Stored procedure

    We have huge data table(600 columns and 800 rows approx) which we want to transpose 600 rows and 800 columns in a CLR stored procedure.
    Currently am using a datatable to the transpose. Could anyone suggest any better options other than datatable which gives better performance?

    Hi Hari,
    If my understand is correct, please consider using unpivot or pivot sql:
    http://msdn.microsoft.com/en-us/library/ms177410(v=sql.105).aspx
    http://blog.sqlauthority.com/2008/06/07/sql-server-pivot-and-unpivot-table-examples/
    Best Regards,
    Iric
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

  • Executing a Variable in a Stored Procedure containing an Update Statement

    Hi,
    I have created a Stored Procedure, it has one input parameter. Inside the Stored Procedure there are 5 other variables are declared, based on the input parameter 4 of these variables are populated.
    Fifth variable is a a concatenation of text and some of these variables and creates a dynamic Update Statement. Once it is created I want to execute this variable but it is not executing.
    Could someone please help me in knowing how to execute a variable within a stored procedure that contains an update statement.
    Thanks for your help.
    Thanks
    Vineesh
    vineesh1701

    If you have set up the variable so that it contains a valid sql update, it should work.  For example, see below, which does do an update
    use tempdb
    go
    Create Table #Test(i int);
    Insert #Test(i) Values(1);
    go
    Create Procedure TestProc As
    Begin
    Declare @SQL nvarchar(250);
    Set @SQL = 'Update #Test Set i = 2';
    --Print @SQL;
    Exec sp_executesql @SQL;
    End
    go
    Exec TestProc
    -- Test Result
    Select * From #Test;
    go
    Drop Procedure TestProc;
    go
    Drop Table #Test;
    One thing I would recommend while testing is that you print out or select the variable that contains the dynamic sql.  (Like the above code where I have a print statement.  That lets you see exactly what you are executing and if there is any problem
    with the update command. 
    As Naomi said, to get anything more than general help, you will probably have to show us your code and the parameter values you are passing when you execute the stored proc.
    Tom

  • SQL Server 2005 64-bit & SQL CLR Stored Procedures using DI API. COM Error.

    Hi,
    We've created a set of SQL CLR Stored Procs in C# .NET which use the DI API to import data into SAP (DEV was carried out on 32-bit environment).
    The DLLs and Interop.SAPbobsCOM have been successfully deployed as assemblies on SQL Server with their permission set to UNSAFE on the following environment:
    Microsoft Windows Server 2003 R2 Standard Edition 64-bit, Service Pack 2
    Microsoft SQL Server 2005 - 9.00.3073.00 (X64)
    SAP Business One 2007 A (8.00.180) SP:00 PL:45
    When executing the SQL CLR Stored Procs from SQL Server Management Studio, the following error is returned:
    "Retrieving the COM class factory for component with CLSID {632F4591-AA62-4219-8FB6-22BCF5F62007} failed due to the following error: 80040154."
    From our understanding, this occurs because SQL Server loads the assemblies into it's 64-bit process space, whereas the SAPbobsCOM is 32-bit. Are we assuming correctly?
    What can be done to solve this problem?

    Hi Jeremy,
    I'd agree with your assumption that it's to do with your DLL running in a 64 bit process. When you build your project, try setting the build properties to use a X86 instruction set (ie 32 bit).
    More details here:
    Re: Addon Develeped on 32bit Install on 64bit
    I've never tried for a CLR stored procedure but this is how you get around the issue when running a DI API addon on a 64 bit machine so hopefully it will work if the dll is executed by SQL Server. Let us know how you get on.
    Kind Regards,
    Owen

  • Invoke/Return Dataset from WebService in CLR Stored Procedure

    Hello,
    I am running SQL Server 2008 R2 or 2012 and Visual Studio 2010 Premium sp1. I have a stored procedure which currently returns a dataset which is used via SQLDataReader within a C# code-behind module in an ASP.NET application. This application uses the .NET
    4.0 framework. 
    I need to join the results from an external webservice (but within the same network) to this dataset. Instead of getting the data and putting it into a data table in code-behind (probably a HashTable which I could join with key/value pairs), I would like
    to get all of the data in the same stored procedure. I was thinking I could invoke the webservice and pass the input parms to the webservice then put the results into a temp table which I could then join with the query to the physical table.
    So, I have done quite a bit of researching online but have been unable to find any definitive answer or solution. I read the related forum thread "CLR Stored procedure consume webservice" but this does not address my versions of SQL Server / .NET
    framework.
    If someone could offer any suggestions or point in the right direction I would greatly appreciate it. Perhaps what I am trying to do is simply not possible?
    Regards,
    Buster

    Hello,
    I am trying to involve someone more familiar with this topic for a further look at this issue. Sometime delay might be expected from the job transferring. Your patience is greatly appreciated.
    Thank you for your understanding and support.
    Regards,
    Fanny Liu
    If you have any feedback on our support, please click here.
    Fanny Liu
    TechNet Community Support

  • Printing OUT variables from a Stored Procedure

    Hi all,
    I'm running an SQL command that calls a Stored Procedure and passes in some value. I've pasted in the important parts of it below. What I am trying to do is access the OUT variables that have been assigned to the DECLARED variables. I come from a SQL Server background and there we can do "SELECT @variable" which will print it to screen. I'm trying to do something similar here.
    I need to access the contents of the three variables declared at the top of the script.
    Thanks in advance.
    DECLARE
    l_error_value NUMBER;
    l_error_product VARCHAR2 (10);
    l_CE_DOC_ID number;
    BEGIN
    PEM.create_enquiry   
         (      ce_cat => 'COMP'
                   , ce_class => 'FRML'
                   , error_value => l_ERROR_VALUE
                   ,error_product => l_ERROR_PRODUCT
                   , ce_doc_id => l_ce_doc_id
    END;

    Ah yes I see. Sorry I misunderstood what you were suggesting. I'm currently working on a test script that uses an approach similar to the one you mentioned, but I'm having trouble resolving foreign key relationships with test data.
    I've no access to the tables or anything so it's proving to be a time consuming task!!
    Is it required that all fields are given a value, even if they have a "DEFAULT" defined for them within the procedure. At the moment I'm using a rather cumbersome approach to this:
    i.e.
    With cmmAddRequest
        .ActiveConnection = strConnect
        .CommandType = adCmdText
        .CommandText = strSQL
        .Parameters(0).Direction = adParamInput
        .Parameters(1).Direction = adParamInput
        .Parameters(2).Direction = adParamInput
        .Parameters(3).Direction = adParamOutput
        .Parameters(4).Direction = adParamOutput
        .Parameters(5).Direction = adParamOutput
        .Parameters(0).Value = "COMP"
        .Parameters(1).Value = "FRML"
        .Parameters(2).Value = "1"
        .Execute
        WScript.Echo(.Parameters(5).Value)
    End With

  • URGENT: I want to pass a variable to a stored procedure at run time

    Post Author: aruplabs
    CA Forum: Data Connectivity and SQL
    I work for a health care provider and I have reports that pull PHI (Protected Health Information) about patients that needs to be logged according to federal HIPAA regulations. One of the pieces of information that needs to be logged is the username of the person who ran the report. Since these reports will be run from our Crystal Enterprise server I can get this from the CurrentCEUserName variable but I am looking for a way to pass this value to a stored procedure that will not only return the records for the report, but also log the disclosure in our PHI disclosure tracking table. I know you can pass a parameter to a stored procedure but I dont know how, or if it is even possible, to pass a run time variable. This is an urgent problem that I need to find a solution for. Any help would be appreciated.
    Thank you.

    Here it is. Right now, when i press te "Go" it runs for the specific time i've set and when its done the variable "Run" is set true. When i call this VI from another VI it waits for the loop to be finished before it will read the variable.
    Regards
    Viktor
    Attachments:
    Untitled 2.vi ‏26 KB

  • How to pass javascript variable to PLSQL stored procedure

    Hi,
    How can I pass a javascript variable to a database procedure. I have a form with a radio button group and would like to save the value of the selected radio button to a database table by passing the value to the stored procedure.
    Thanks

    Hi
    You can use iframe to call the procedure. Here is an example used in dynamic page or pl/sql portlet. The pl/sql procedure is called myprocedure and resists in the schema myschema. This example passes 2 parameters, but I have not yet reased a limit.
    First the call within a javascript function:
    myiframe.location.href="myschema.myprocedure?p_myprameter1=" + vJvascriptparameter1 + "&p_myprameter2=" + vJvascriptparameter2;
    Then the iframe:
    <iframe id="myiframe" height="0" width="0" frameborder="0"></iframe>
    You can let the pl/sql procedure print a value, that can be used i the portlet. You can get the value in a javascript this way:
    myvalue=top.window.frames["myiframe"].document.body.innerHTML;
    Best regards
    Klaus

  • How to pass a presentation variable to a stored procedure?

    Hi All,
    We have a complex security model to emulate. In order to achieve that, we need to find a way for OBI to run and pass parameter to a stored procedure (SP).
    "APlus_BI_EmplName2" is the name of the stored procedure.
    This SP requires a param and can be run in toad for SQL as : - exec APlus_BI_EmplName2 @ empno
    here is one example:- exec APlus_BI_EmplName2 128807
    It will result in empno, empname (128807,Looney VALERIE).
    Also, I have made a sample report on the Dashboard.Here i'm capturing a employee number via a dropdown in a presentation variable ( "empno") which i would like to pass to the stored procedure... just a way of testing that a variable/param can be passed to SP...
    Can anybody tell how to achieve the same?
    Regards,
    Apoorv

    What session variable now?
    You asked something else:
    Hi All,
    We have a complex security model to emulate. In order to achieve that, we need to find a way for OBI to run >and pass parameter to a stored procedure (SP).
    "APlus_BI_EmplName2" is the name of the stored procedure.
    This SP requires a param and can be run in toad for SQL as : - exec APlus_BI_EmplName2 @ empno
    here is one example:- exec APlus_BI_EmplName2 128807
    It will result in empno, empname (128807,Looney VALERIE).
    Also, I have made a sample report on the Dashboard.Here i'm capturing a employee number via a dropdown in a >presentation variable ( "empno") which i would like to pass to the stored procedure... just a way of testing that a >variable/param can be passed to SP...
    Can anybody tell how to achieve the same?To understand your problem please post your init. block code and your dashboard prompt field explanation.
    Regards
    Goran
    http://108obiee.blogspot.com

  • Weird behaviour with Variables of a Stored Procedure

    Hello All,
       I'm writing following stored procedure and it is failing with following error
    "Conversion failed when converting from a character string to uniqueidentifier"
     What's Happening?
      I've created
    Create Procedure usp_Sample
    AS
    Declare @Var Int
    Select @Var = Key From MyKeyTable Where Name = 'XYZ'
    Select * From BaseTable A
    LEFT JOIN JoinTable B
    ON A.UniqueIdentifierField = CONVERT(UNIQUEIDENTIFIER,B.VarcharField)
    AND B.Key = @Var
    GO
    Procedure got created and when you execute it you see the above error...
    If I remove the Variable and HardCode it with any value then it runs fine...
    Could someone tell me what is wrong with the variable here? (I Can't hardcode the Variable Value In the Proc).
    "BaseTable" has a field that is UniqueIdentifier and "JoinTable" has a NVARCHAR (1020) Field. But JoinTable has proper UniqueIdentifier data. 
    Let me know if you need anymore info...
    --Roger
    Unknown

    Could someone tell me what is wrong with the variable here? (I Can't hardcode the Variable Value In the Proc).
    You are making the mistake to assume that just because is no error message, nothing is wrong.
    Apparently there are values in the varchar column which are not GUIDs, so saying
       CONVERT(UNIQUEIDENTIFIER,B.VarcharField)
    is an accident waiting to happen. But it does not have to blow up, just like you don't have to crash when you drive on the wrong side of the road. If you are lucky, there are no cars there in that moment.
    There is no defined order in which operands are evaluated in SQL Server, and using a variable or a constant is very likely to give you diffeent query plan.
    If you are on SQL 2012, use try_convert instead which will return NULL if the value does not convert. But Naomi is probably right when she suggest that you should convert the GUID to string, given the structure of the query.
    Erland Sommarskog, SQL Server MVP, [email protected]

  • PowerShell - scripting - skip Encrypted\CLR Stored Procedures

    Hi all,
    Forgot where I got the code below from but, how would I skip Encrypted\CLR procedures because, I get error below...
    Message
    Executed as user: Loginname A job step received an error at line 81 in a PowerShell script. The corresponding line is '
    $MyScripter.Script($proc)|out-null'. Correct the script and reschedule the job. The error information returned by PowerShell is: 'Exception calling "Script" with "1" argument(s): "The StoredProcedure '[dbo].[myrpocname]'
    cannot be scripted as its data is not accessible."  '.  Process Exit Code -1.  The step failed.
    #STORED PROCEDURES
    if($procs -ne $null)
    foreach ($proc in $procs)
    #Assuming that all non-system stored procs have proper naming convention and don''t use prefixes like "sp_"
    if ( $proc.Name.IndexOf("sp_") -eq -1 -and $proc.Name.IndexOf("xp_") -eq -1 -and $proc.Name.IndexOf("dt_") -eq -1)
    $fileName = $proc.name
    "Scripting SP $fileName"
    $scriptfile = "$rootDrive\DatabaseScripts\$sqlDatabaseName\$strDate\StoredProcedures\$filename.sql"
    New-Item $rootDrive\DatabaseScripts -type directory -force | out-null
    New-Item $rootDrive\DatabaseScripts\$sqlDatabaseName -type directory -force | out-null
    New-Item $rootDrive\DatabaseScripts\$sqlDatabaseName\$strDate -type directory -force | out-null
    New-Item $rootDrive\DatabaseScripts\$sqlDatabaseName\$strDate\StoredProcedures -type directory -force | out-null
    # SetScriptOptions
    $MyScripter.Options.FileName = $scriptfile
    #AppendTofile has to be ''true'' in order that all the procs'' scripts will be appended at the end
    $MyScripter.Options.AppendToFile = "true"
    $MyScripter.Script($proc)|out-null
    Thanks
    gv
    Sword

    You can exclude encrypted stored procedure using $_.IsEncrypted member.
    $storedProcs = $db.StoredProcedures | Where-object { $_.schema -eq $schema -and -not $_.IsSystemObject -and  -not $_.IsEncrypted}
    $server = "localhost"
    $database = "PowerSQL"
    $output_path = "F:\PowerSQL\"
    $schema = "dbo"
    $storedProcs_path = "$output_path\StoredProcedure\"
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | out-null
    $srv = New-Object "Microsoft.SqlServer.Management.SMO.Server" $server
    $db = New-Object ("Microsoft.SqlServer.Management.SMO.Database")
    $tbl = New-Object ("Microsoft.SqlServer.Management.SMO.Table")
    $scripter = New-Object ("Microsoft.SqlServer.Management.SMO.Scripter") ($server)
    # Get the database and table objects
    $db = $srv.Databases[$database]
    $storedProcs = $db.StoredProcedures | Where-object { $_.schema -eq $schema -and -not $_.IsSystemObject -and -not $_.IsEncrypted}
    # Set scripter options to ensure only data is scripted
    $scripter.Options.ScriptSchema = $true;
    $scripter.Options.ScriptData = $false;
    #Exclude GOs after every line
    $scripter.Options.NoCommandTerminator = $false;
    $scripter.Options.ToFileOnly = $true
    $scripter.Options.AllowSystemObjects = $false
    $scripter.Options.Permissions = $true
    $scripter.Options.DriAllConstraints = $true
    $scripter.Options.SchemaQualify = $true
    $scripter.Options.AnsiFile = $true
    $scripter.Options.EnforceScriptingOptions = $true
    function CopyObjectsToFiles($objects, $outDir) {
    if (-not (Test-Path $outDir)) {
    [System.IO.Directory]::CreateDirectory($outDir)
    foreach ($o in $objects) {
    if ($o -ne $null) {
    $schemaPrefix = ""
    if ($o.Schema -ne $null -and $o.Schema -ne "") {
    $schemaPrefix = $o.Schema + "."
    $scripter.Options.FileName = $outDir + $schemaPrefix + $o.Name + ".sql"
    Write-Host "Writing " $scripter.Options.FileName -ErrorAction silentlycontinue
    $scripter.EnumScript($o)
    # Output the scripts
    CopyObjectsToFiles $storedProcs $storedProcs_path
    Write-Host "Finished at" (Get-Date)
    -Prashanth

Maybe you are looking for

  • I can't get itunes to open on additional computer

    I have itunes loaded on one computer and just loaded on new laptop with Windows 7.  When I try to log in to itunes store on new computer, it only loads 1/2 way and then stops.  Still works fine on old computer.

  • Works in flash 6 not flash 8

    I'm updating our site from flash 6 to 8 and the following code does not work now. The MovieClip it's attached to should scroll up/down dependent on the cursor's position. Anyone have any thoughts? I'm not very familiar with the code so any help will

  • Need help with barcode scanning

    Hi All, In my program, when a user scan a barcode, I need the code appear directly on my dynpro screen field and automatically move on to a new screen without the need of user to press Enter or execute. Can this be done? I don't even know how to code

  • 0ra 12560:tns adaptor protocol error

    Hi Frenz I m New to oracle 10g when i insatlled 10g at that tym i created a database from DBCA n it is working fine... but now if i am creating a database from DBCA it is giving me ora 12560: TNS adaptor protocol error but Listener on machine is up n

  • Istallation problem after reformatting HD

    I am running my imac off snow leopard on an external HD.  I reformatted my internal HD and want to put Lion on it.   But the Install Mac OS X Lion page does not allow it as an option. What is the best / easiest way to get Lion installed on the intern