Parameter containing part of an SQL statement... it could be cool !

Hi,
I know this is currently not allowed, but maybe, in the future...
anyway, I often have the need to programmatically build an SQL statement. Sometimes there is a fixed part (SELECT... FROM...), and a variable part that changes in that statement (WHERE...)
It could be very cool if I set a parameter that, instead of a value, can carry a part of an SQL statement.
Example:
SELECT * from foo where cod in
   (select ID from ringtones where brand in
      (select phone from world where country in ('JAPAN', 'NORWAY'))
   )I wish to have a statement like that:
SELECT * from foo where cod in
   (select ID from ringtones where brand in
      (select phone from world where :condition)
   )...and set the :contition parameter with a string, that is:
"country in ('JAPAN', 'NORWAY')"
or anything else.
What do you think about this?
Regards

anyway, I often have the need to programmatically
build an SQL statement. Sometimes there is a fixed
part (SELECT... FROM...), and a variable part that
changes in that statement (WHERE...)Look for Dynamic SQL.

Similar Messages

  • Using a Bind Variable in the FROM part of a SQL Statement?

    Hello Everyone,
    I have a problem, I am trying to run an SQL statement. However I need the FROM part of the SQL statement to be a bind variable. This is because the end user will need to select between 2 database views.
    I have tried this:
    select CON_ID from :P23_DB_NAME where CON_LEGACY_ID=:P23_CONLEG_NO
    I had no luck. The error i got was,
    "+Query cannot be parsed within the Builder. If you believe your query is
    syntactically correct, check the ''generic columns'' checkbox below the
    region source to proceed without parsing.
    ORA-00903: invalid table name+"
    Which makes sence, but now I am a bit stuck.
    Does anyone have any ideas as to get around this problem?
    Thanks in Advance.
    -N.S.N.O.

    The example I gave you is quite simple. You need to take some time to study it to see where you need be carefull what you put where. Now, your example of course doesn't work becaues you have several errors. This will work for you:
    DECLARE
       x   VARCHAR2 (4000);
    BEGIN
       x := x || 'SELECT CON_ID FROM ';
       x := x || :p23_db_name;
       x := x || ' WHERE CON_LEGACY_ID = ' || :p23_conleg_no;
       RETURN (x);
    END;Denes Kubicek
    http://deneskubicek.blogspot.com/
    http://www.opal-consulting.de/training
    http://apex.oracle.com/pls/otn/f?p=31517:1
    -------------------------------------------------------------------

  • How can i put the value of a variable in an SQL statement?

    Hi,
    Can someone please tell me how i can use a variable as part of an sql statement.
    So instead of "SELECT * FROM tablename WHERE username='john'"
    I can put in "SELECT * FROM tablename WHERE username.text"

    What would happen if someone entered "(delete *
    from tablename)" into the username field?The SELECT would fail and the DELETE
    would never run.
    Or am I missing something?Ok, that wasn't valid SQL, so lets change it into valid SQL. What would this do
    "SELECT * FROM tablename WHERE username=" + user
    where user is "blah;DROP TABLE tablename;"
    The SQL would become
    SELECT * FROM tablename WHERE username=blah;DROP TABLE tablename;
    And that would select, and then drop the table
    Kaj
    Message was edited by:
    kajbj

  • Application goes halt while excecuting a SQL statement

    Hello,
    My application has a Database connection with JDBC-ODBC driver...
    First I fill in an combo-box with data out of the database: let's say from the the Column "Name" in the Table "Children".
    When I select a Child's name some labels apears where the details, from the child I selected, are shown.
    I use the SQL statement: SELECT * FROM [database].[me].[Children] WHERE Name = 'Jacky';
    When I click on a button named "Change Data", I want a dialog box to apear where the column names, empty TextFields and the "Old" Data is beeing shown.
    I've created the Labels and the TextField, but when I come to the part where the SQL statement I beeing excecuted, my application halts.
    This SQL statement is excectly the same as above:
    SELECT * FROM [database].[me].[Children] WHERE Name = 'Jacky';
    I don't get an Exception or something like that.
    Can anybody help me please???

    I use MS SQL-server 2000
    I've created a new Database and that database is only accesible by my application.... and becouse I'm busy creating that application... I think I'm the only user on that database during the time I'm devolping the app.
    But It is so that some where else in my code I call the same table with another Updatable ResultSet that might locks the whole table....
    I'll try to close that one or to make that resultset ReadOnly.... and make the other resultset updatable again...
    thnx for now....
    Follyaxel

  • Retrieve int using sql statements

    Hi there,
    Does anyone have any ideas as to how i can update a database table with an integer, returned from a second table as part of an sql statement.
    Here is part of the method to get the value i want out of the database:
    public int retrieveId() throws SQLException
      sta = c.prepareStatement("SELECT MAX(cid) FROM Customer");
      ResultSet rs = sta.executeQuery();
      //this method retrieves the first (and in this case the only)
      //value in the result set as an integer
      rs.getInt(1);
      //?????i am unsure as to what to do here to return this integer
    }To clarify my problem, this value will be used to update a second table in the database, i.e:
    public void updateHasAddress() throws SQLException
      sta = c.prepareStatement("INSERT INTO HasAddress(cid) VALUES(?);");
      sta.setInt(1, retrieveId());
      sta.executeUpdate();
      sta.close();
    }However, i have no idea how to return just the integer in the first method - and without all sorts of strange exceptions being thrown - i have tried all sorts of work arounds, but none have worked so far!
    Thanks for your Time

    One thing though, if the statment execution failed for any reason, then you are not closing your statement/result set which will cause problems down the line.
    public int retrieveId()
    String query = "";
    try { 
    query = "SELECT MAX(cid) FROM Customer";
    Statement stmt = connect.createStatement();
    ResultSet rs = stmt.executeQuery(query);
    rs.next();
    int a = rs.getInt(1);
    rs.close();
    stmt.close();
    return a;
    catch(Exception ex) {
    System.out.println(ex);
    return null;
    }Try this instead:
    public int retrieveId()
       String query = "";
       ResultSet rs = null;
       Statement stmt = null;
       try { 
        query = "SELECT MAX(cid) FROM Customer";
        stmt = connect.createStatement();
        rs = stmt.executeQuery(query); 
        rs.next();
        int a = rs.getInt(1);  
        return a;
       catch(Exception ex) {
        System.out.println(ex);
        return null;
       finally
         try { rs.close(); } catch ( Exception e ) {}
         try { stmt.close(); } catch ( Exception e ) {}
    }Now, you have no chance of leaving cursors open or getting memory leaks.

  • Same sql statement gives output in different lines in 12.1.3 vs 11i

    Hi all,
    DB:11.2.0.3.0
    EBS:11i and 12.1.3
    O/S: Solaris SPARC 64 bits 5.10
    The below query gives the output in one line in 11i as expected but it gives the output in two separate lines in 12.1.3. Are there any server level settings for linesize and pagesize to be performed?
    set term off;
      set serveroutput on size 1000000;
      set feedback off;
      set pagesize 0;
      set head off;
      set linesize 72;
      set pause off;
      set colsep '';
    select
            lpad(code_combination_id,15,0)||
            rpad(to_char(start_date_active,'YYYYMMDD'),8,' ')||
            rpad(to_char(end_date_active,'YYYYMMDD'),8,' '),
            substr(SEGMENT1,1,3)||  --entity
            rpad(substr(SEGMENT2,1,6),6,' ')||  --account
            rpad(substr(SEGMENT3,1,5),5,' ')||  --costcenter
            rpad(substr(SEGMENT4,1,6),6,' ')||  --activity
            substr(SEGMENT6,1,3)||  --product
            substr(SEGMENT7,1,3)||  --service
            substr(SEGMENT5,1,3)||  --country
            substr(SEGMENT8,1,3)||  --intercompany
            rpad(substr(SEGMENT9,1,8),8,' ')||  --regional
            substr(enabled_flag,1,1) -- active flag
    from gl_code_combinations
    where last_update_date >=
          (select nvl(max(actual_start_date),'01-JAN-1951')
           from fnd_concurrent_requests
           where concurrent_program_id = (select concurrent_program_id
                                          from fnd_concurrent_programs
                                          where
                                          concurrent_program_name = 'XYZACCT')
           and status_code = 'C'
           and actual_completion_date is not null)
    order by 1;
    OUTPUT in 11i
    ============
    00000000000100020120930        7014912000000000000000000000000000000000Y
    00000000000100120120930        5014912000000000000000000000000000000000Y
    OUTPUT in 12.1.3
    ==============
    00000000000116020120930
    4881124010000000000000000000000000000000Y
    000000000001161
    6103229990000000000000000000000000000000Y
    11i and 12.1.3 should get the output in one line as per the above sql statement.
    Could anyone please share the fix on the above issue?
    Thanks for your time
    Regards,

    Hi,
    Can you confirm in what session are you running this query.
    Try this
    Column Code_Date_Range format a25
    Column Segments format a50
    set lines 300
    set pages 200
    set term off;
      set serveroutput on size 1000000;
      set feedback off;
      set pagesize 0;
      set head off;
      set linesize 72;
      set pause off;
      set colsep '';
    select
            lpad(code_combination_id,15,0)||
            rpad(to_char(start_date_active,'YYYYMMDD'),8,' ')||
            rpad(to_char(end_date_active,'YYYYMMDD'),8,' ') Code_Date_Range,
            substr(SEGMENT1,1,3)||  --entity
            rpad(substr(SEGMENT2,1,6),6,' ')||  --account
            rpad(substr(SEGMENT3,1,5),5,' ')||  --costcenter
            rpad(substr(SEGMENT4,1,6),6,' ')||  --activity
            substr(SEGMENT6,1,3)||  --product
            substr(SEGMENT7,1,3)||  --service
            substr(SEGMENT5,1,3)||  --country
            substr(SEGMENT8,1,3)||  --intercompany
            rpad(substr(SEGMENT9,1,8),8,' ')||  --regional
            substr(enabled_flag,1,1) Segments -- active flag
    from gl_code_combinations
    where last_update_date >=
          (select nvl(max(actual_start_date),'01-JAN-1951')
           from fnd_concurrent_requests
           where concurrent_program_id = (select concurrent_program_id
                                          from fnd_concurrent_programs
                                          where
                                          concurrent_program_name = 'XYZACCT')
           and status_code = 'C'
           and actual_completion_date is not null)
    For more details, please see:
    Formatting SQL*Plus Reports
    Thanks &
    Best Regards

  • Multiple SQL Statements in Data Template

    If I have more than 1 sql statements in a data template, how can I target them directly? I would like to link directly to a report and don't want to use the default sql statement.

    Sorry, could you please elaborate further.

  • Pass ORG_ID as sql statement for parameter in request set

    We are in a multi-org environment. We are running the request PRC: Generate Draft Revenue for a Single Project as part of the request set. We want the request to automatically fill in the open pa period as the accrue through date. We have been using the SQL Statement below as the value for the accrue through date parameter.
    select end_date
    from pa_periods_all
    where status = 'O'
    and current_pa_period_flag = 'Y'
    Unfortunately that does not limit to a specific company. We a company that still have DEC-05 while another has an open period of JAN-06. This is causing the program fits. How do I pass the org_id to the request? [in beginners terms please]
    Thanks.
    Anne

    No idea what might be wroong without more info...
    Do some output. Test the ${params.id} variable passed to the second jsp. If that is correct, then error is in the select statement or display of jsp2. If it is correct the error comes from jsp1.
    If I have to guess, then I would say the error comes from JSP1, and the ${row.vac_id} should only be called once. In which case I would do something like this:
    //in jsp 1
                <c:forEach var="row" items="${results.rows}"  varStatus="counter"  >
                    <c:set var="vac_id" value="${row.vac_id}" scope="page"/>
                    <tr>
                        <td>${vac_id}</td>
                        <td><a href="vacancydetails.jsp?id=${vac_id}">More</a></td>But that is a guess only...
    Errr... Hold on to that as reference, but the it is entirely likely that I misspelled ${params.id} It may be ${param.id} I forget and away from my machine right now...

  • Execute Stored Procedure SQL Statement with Parameter from Cell

    I would like to know if there is a way to pass the parameters to SQL Statement of Power Query. For example, I have a SQL Statement as follows:
    EXEC [dbo].[spReportBuilder]
    @Report = N'Revenue Summary',
    @Year = N'2014',
    @Period = N'11'
    I would like to know if it is possible to pass the @Report, @Year, @Period values from cells in the workbook, preferably without vba.
    Thanks

    rtisserand, 
    Here is the M code: 
    let
    IDValue = Excel.CurrentWorkbook(){[Name="YearTable"]}[Content],
    Source = Sql.Database("localhost", "AdventureWorks2012", [Query="EXEC [dbo].[spReportBuilder] @Report = N'Revenue Summary', @Year = N'" & Number.ToText(IDValue[ID]{0}) & "', @Period = N'11'"])
    in
    Source
    Some notes:
    You have to reference the excel query from another step in the query or you will get the following error: 
    Formula.Firewall: Query <>something<> references other queries or steps and so may not directly access a data source. Please rebuild this data combination.
    I only did the parameter for one value.
    Hope this helps.
    Reeves
    Denver, CO

  • Can I append the file name from a Foreach Loop Container Enumerator into a SQL Server Statement?

    I would like to pass back via an Email the name of the file that was successfully FTP'ed to a remote server. And I was hoping to do this via an Execute SQL Task with the following SQL Statement...but I just don't know if it will append the Foreach Loop Container
    variable enumerator to the appended Email message that I am building in SQL Server or if I can and how I can...
    I sort of get the feeling that I can try and do this via Dynamic SQL...I just don't know if by building dynamic SQL if my Foreach Loop Container enumerator variable will be appended to my Email Message via the SQL Server UPDATE 
    @[User::FTPFHFileName]
    Or do I add a Data Flow Task and an OLE DB Command and pass the Foreach Loop Container enumerator variable to a Stored Procedure referenced in the OLE DB Command via a "?"
    Thanks for your review and am hopeful for a reply.

    Hello,
    It seems that the issue had been solved and thanks for your sharing. It will be very beneficial for other community members who have similar questions.
    I’d like to mark this issue as "Answered". Please also feel free to unmark the issue, with any new findings or concerns you may have.
    Regards,
    Katherine Xiong
    Katherine Xiong
    TechNet Community Support

  • How do I Pass a parameter to a SQL Component Task where the source SQL statement is also a variable

    Hi,
    I have been tasked with making a complex package more generic.
    To achieve this I need to pass a parameter to a SQL Component Task where the source SQL statement is also a variable.
    So to help articulate my question further I have create a package and database as follows; -
    USE [KWPlay]
    GO
    /****** Object: Table [dbo].[tblTest] Script Date: 05/14/2014 17:08:02 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[tblTest](
    [ID] [bigint] IDENTITY(1,1) NOT NULL,
    [Description] [nvarchar](50) NULL,
    CONSTRAINT [PK_tblTest] PRIMARY KEY CLUSTERED
    [ID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    GO
    I populated this table with a single record.
    I unit tested the SQL within SSMS as follows;
    SELECT * FROM dbo.tblTest
    Result; -
    ID           
    Description
    1             
    Happy
    DECLARE @myParam NVARCHAR(100)
    SET @myParam = 'Sad'
    UPDATE dbo.tblTest SET [Description] = @myParam FROM dbo.tblTest WHERE ID = 1
    SELECT * FROM dbo.tblTest
    Result; -
    ID   
    Description
    1    
    Sad
    Within the package I created two variables as follows; -
    Name: strSQL
    Scope: Package
    Data Type: String
    Value: UPDATE dbo.tblTest SET [Description] = @myParam FROM dbo.tblTest WHERE ID = 1
    Name: strStatus
    Scope: Package
    Data Type: String
    Value: Happy
    I then created a single ‘Execute SQL Task’ component within the control flow as follows; -
    However when I run the above package I get the following error; -
    SSIS package "Package.dtsx" starting.
    Error: 0xC002F210 at Execute SQL Task, Execute SQL Task: Executing the query "UPDATE dbo.tblTest SET [Description] = @myParam FR..." failed with the following error:
    "Parameter name is unrecognized.". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.
    Task failed: Execute SQL Task
    Warning: 0x80019002 at Package: SSIS Warning Code DTS_W_MAXIMUMERRORCOUNTREACHED. 
    The Execution method succeeded, but the number of errors raised (1) reached the maximum allowed (1); resulting in failure. This occurs when the number of errors reaches the number specified in MaximumErrorCount. Change the MaximumErrorCount or fix the
    errors.
    SSIS package "Package.dtsx" finished: Failure.
    I also tried; - 
    Name: strSQL
    Scope: Package
    Data Type: String
    Value: UPDATE dbo.tblTest SET [Description] = ? FROM dbo.tblTest WHERE ID = 1
    However I received the error; - 
    SSIS package "Package.dtsx" starting.
    Error: 0xC002F210 at Execute SQL Task, Execute SQL Task: Executing the query "UPDATE dbo.tblTest SET [Description] = ? FROM dbo...." failed with the following error: "Parameter name is unrecognized.". Possible failure reasons: Problems with
    the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.
    Task failed: Execute SQL Task
    Warning: 0x80019002 at Package: SSIS Warning Code DTS_W_MAXIMUMERRORCOUNTREACHED.  The Execution method succeeded, but the number of errors raised (1) reached the maximum allowed (1); resulting in failure. This occurs when the number of errors reaches
    the number specified in MaximumErrorCount. Change the MaximumErrorCount or fix the errors.
    SSIS package "Package.dtsx" finished: Failure.
    Kind Regards,
    Kieran.
    Kieran Patrick Wood http://www.innovativebusinessintelligence.com http://uk.linkedin.com/in/kieranpatrickwood http://kieranwood.wordpress.com/

    Tried; - 
    Name: strSQL
    Scope: Package
    Data Type: String
    Value: UPDATE dbo.tblTest SET [Description] = ? FROM dbo.tblTest WHERE ID = 1
    and; - 
    Result; - 
    SSIS package "Package.dtsx" starting.
    SSIS package "Package.dtsx" finished: Success.
    Therefore the answer was to put the parameter number rather than the parameter name under the parameter mapping tab-> parameter name column. 
    Kieran Patrick Wood http://www.innovativebusinessintelligence.com http://uk.linkedin.com/in/kieranpatrickwood http://kieranwood.wordpress.com/

  • Pass parameter to sql statement in query manager

    Hai to all,
               I want to pass the percentage  as the parameter into the sql statemnet.i what to execute it in the query manager.
              If i execute that statement then cann't found the tablename error is coming.
             Other than the data in the table (general data)  pass to the parameter in the sql at runtime.
    for example:
    select [%0] *100
    how to pass 10 to that sql statement.
    Please help me...
    Regards,
    Raji.

    Hi Ramya,
    You can create a SP with parameters to accept and then execut this SP from SAP Business One Query Manager by passing the parameter (in your case 10). The result will be as desired.
    Ex:
    Create this Procedure in SQL Management Studio
    create proc Test(@a as int)
    as
    begin
    select (@a*100)
    end
    To Execute the Query use this Query and pass the desired values with parameters
    execute Test 10
    Regards,
    Reno

  • Passing parameter into SQL statement in Crystal Reports

    Hi all,
    I would like to call Crystal Reports in JSP. I can handle it well now. But I hope to let user input their selection criteria before printing out the report. I know how to get the parameter value in JSP, but I really dunno how to pass these parameter values into the SQL statement in Crystal Report. Actually, is it possible to do so?
    If anyone has idea, please tell me. Thx Thx!
    Regards,
    Betty

    Dear Sir,
    I want to use Crystal Report as a web base using JSP. But, I am getting how to call .rpt file in .jsp file & passing of parameter.
    If you have any idea, please reply as early as possible
    Thanking U.
    My userid = [email protected]
    Regds
    Pankaj..

  • SQL Statement as Parameter for Stored Proc

    This works fine in SQL script, but doesn't work when converting the script to a sp.  It doesn't like how I've defined the @PeriodEndDate parameter.  How do I set the variable to the results of a SQL statement?
    CREATE PROCEDURE usp_ARAging 
    -- Add the parameters for the stored procedure here
    @FiscalYear int = 2014, 
    @FiscalPeriod int = 5,
    @PeriodEndDate date = (SELECT MAX(JEDate) FROM ERPSQL01.EpicorNamg905.Accounting.Dim_JEDate
    WHERE FiscalYear = @FiscalYear
    AND FiscalMonth = @FiscalPeriod)
    Kirk P.

    Let's start over.  The default value of a procedure argument is a "suggestion" - a value to be used when it is not provided by the caller.  So is your goal to allow the user to supply any date, not just the one that coincides with the
    fiscal year and period values?  IF not, then it should not be a parameter and the value should be determined by the code inside the stored procedure. 
    However, if your goal is to allow any value, then you must follow the rules for specifying an appropriate default and those rules are very restrictive.  You cannot use a query nor can you refer to other parameters.  The typical approach is to use
    a "marker" value which the caller uses to indicate that it wants to use the true "default" value which you would then determine inside your stored procedure.  Often a value of NULL is used; in your procedure the code checks this parameter
    for a null value and, if found, assigns it the value you used in your query above.
    And while we're at it, you should code defensively and check that the set of values supplied as parameters are consistent with each other and with the logic that depends on them.  For example, presumably the period argument should be between 1 and 12
    (and not null).  I suggest you reconsider the use of integers since the domain of these values FAR EXCEEDS that allowed for years and months for most business purposes.

  • Parameter not accessible in SQL statement

    Hello
    I am assigning value to 2 parameters on the form (PARAMETER node)
    :parameter.p1:=5;
    :parameter.p2:='AAA';
    p1 is of number type and p2 is of char type.
    now i want to query as follows
    select count(*) from AA_table where id=:parameter.p1 and name=:parameter.p2;
    this statement return count=0, which is wrong. actual count is 1.
    why param values are not taken in SQL statement, as i display values of parameters using message(), it shows the values properly.....
    plzzzzzz..... help.......

    parameter datatype by default is char. So I doubt though you assign 5 to p1 it considers as a character.
    Try below
    select count(*) from AA_table where id=to_number(:parameter.p1) and name=:parameter.p2;
    or change the data type to number for p1
    Rajesh Alex

Maybe you are looking for

  • How to get the number of rows returned by a report?

    Hi, I'm developing my first application in APEX and so far everything seems fine, except I can't figure out this very simple thing: I have a report based on a PL/SQL block returning an SQL string. I'd like to have a message (something like "X rows re

  • Need help with php gallery

    Hi guys, Thanks for the interest in my post... I want to make a gallery similar to the one at http://www.danwheldon.com/gallery.cfm where the user clicks on an image and it refreshes the current page bringing up the enlarged version above the rest of

  • Accessing tables from remote machine

    I using the following code, to update the record from the emp table. This table is created locally in my machine. Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection conn; String db = "jdbc:odbc:NewDsn"; String username = "test"; String passwor

  • PreparedStatement and Statement

    Hi Joe, We are using the Driver provided by Weblogic (jdriver) and not the one from Informix.Do you suggest any settings for this thanks Nirmala.

  • Adding a new column in a CREATE -- AS SELECT statement

    I am creating a table using a select from an existing table. I wish to also add one new column (with null values for all records). Is this possible? What would the syntax be for this column? Thanks, Kevin