Dynamic Operators

Is is possiable to use a bind variable for a operator in a dynamic PL/SQL query. For example..
l_query := 'select * from users where username :P1_OPERATOR :P1_USERNAME'
With this the user can do = or !=.

Try this:
DECLARE
l_sql varchar2(4000);
l_operator varchar2(4) := '=';
BEGIN
SELECT NVL(:P1_OPERATOR,'=') INTO l_operator from dual ;
l_sql := 'SELECT * FROM SMCFA_ASSETS where SMCFA_ASSETS.ASSET_NUMBER '|| l_operator || '''83''';
RETURN l_sql;
END ;

Similar Messages

  • ROLLUP AND CUBE OPERATORS IN ORACLE 8I

    제품 : PL/SQL
    작성날짜 : 2000-06-29
    ========================================
    ROLLUP AND CUBE OPERATORS IN ORACLE 8I
    ========================================
    PURPOSE
    ROLLUP 과 CUBE Operator에 대해 설명하고자 한다.
    Explanation
    ROLLUP operator는 SELECT문의 GROUP BY절에 사용된다.
    SELECT절에 ROLLUP 을 사용함으로써 'regular rows'(보통의 select된 data)와
    'super-aggregate rows'(총계)을 구할 수 있다. 기존에는 select ... union select
    를 이용해 구사해야 했었던 것이다. 'super-aggregate rows'는 'sub-total'
    (중간 Total, 즉 소계)을 포함한다.
    CUBE operator는 Cross-tab에 대한 Summary를 추출하는데 사용된다. 모든 가능한
    dimension에 대한 total을 나타낸다. 즉 ROLLUP에 의해 나타내어지는 item total값과
    column total값을 나타낸다.
    NULL값은 모든 값에 대한 super-aggregate 을 나타낸다. GROUPING() function은
    모든 값에 대한 set을 나타내는 null값과 column의 null값과 구별하는데 쓰여진다.
    GROUPING() function은 GROUP BY절에서 반드시 표현되어야 한다. GROUPING()은 모든
    값의 set을 표현합에 있어서 null이면 1을 아니면 0을 return한다.
    ROLLUP과 CUBE는 CREATE MATERIALIZED VIEW에서 사용되어 질수 있다.
    Example
    아래와 같이 테스트에 쓰여질 table과 data을 만든다.
    create table test_roll
    (YEAR NUMBER(4),
    REGION CHAR(7),
    DEPT CHAR(2),
    PROFIT NUMBER );
    insert into test_roll values (1995 ,'West' , 'A1' , 100);
    insert into test_roll values (1995 ,'West' , 'A2' , 100);
    insert into test_roll values (1996 ,'West' , 'A1' , 100);
    insert into test_roll values (1996 ,'West' , 'A2' , 100);
    insert into test_roll values (1995 ,'Central' ,'A1' , 100);
    insert into test_roll values (1995 ,'East' , 'A1' , 100);
    insert into test_roll values (1995 ,'East' , 'A2' , 100);
    SQL> select * from test_roll;
    YEAR REGION DE PROFIT
    1995 West A1 100
    1995 West A2 100
    1996 West A1 100
    1996 West A2 100
    1995 Central A1 100
    1995 East A1 100
    1995 East A2 100
    7 rows selected.
    예제 1: ROLLUP
    SQL> select year, region, sum(profit), count(*)
    from test_roll
    group by rollup(year, region);
    YEAR REGION SUM(PROFIT) COUNT(*)
    1995 Central 100 1
    1995 East 200 2
    1995 West 200 2
    1995 500 5
    1996 West 200 2
    1996 200 2
    700 7
    7 rows selected.
    위의 내용을 tabular로 나타내어 보면 쉽게 알 수 있다.
    Year Central(A1+A2) East(A1+A2) West(A1+A2)
    1995 (100+NULL) (100+100) (100+100) 500
    1996 (NULL+NULL) (NULL+NULL) (100+100) 200
    700
    예제 2: ROLLUP and GROUPING()
    SQL> select year, region, sum(profit),
    grouping(year) "Y", grouping(region) "R"
    from test_roll
    group by rollup (year, region);
    YEAR REGION SUM(PROFIT) Y R
    1995 Central 100 0 0
    1995 East 200 0 0
    1995 West 200 0 0
    1995 500 0 1
    1996 West 200 0 0
    1996 200 0 1
    700 1 1
    7 rows selected.
    참고) null값이 모든 값의 set에 대한 표현으로 나타내어지면 GROUPING function은
    super-aggregate row에 대해 1을 return한다.
    예제 3: CUBE
    SQL> select year, region, sum(profit), count(*)
    from test_roll
    group by cube(year, region);
    YEAR REGION SUM(PROFIT) COUNT(*)
    1995 Central 100 1
    1995 East 200 2
    1995 West 200 2
    1995 500 5
    1996 West 200 2
    1996 200 2
    Central 100 1
    East 200 2
    West 400 4
    700 7
    위의 내용을 tabular로 나타내어 보면 쉽게 알 수 있다.
    Year Central(A1+A2) East(A1+A2) West(A1+A2)
    1995 (100+NULL) (100+100) (100+100) 500
    1996 (NULL+NULL) (NULL+NULL) (100+100) 200
    100 200 400 700
    예제 4: CUBE and GROUPING()
    SQL> select year, region, sum(profit),
    grouping(year) "Y", grouping(region) "R"
    from test_roll
    group by cube (year, region);
    YEAR REGION SUM(PROFIT) Y R
    1995 Central 100 0 0
    1995 East 200 0 0
    1995 West 200 0 0
    1995 500 0 1
    1996 West 200 0 0
    1996 200 0 1
    Central 100 1 0
    East 200 1 0
    West 400 1 0
    700 1 1
    10 rows selected.
    ===============================================
    HOW TO USE ROLLUP AND CUBE OPERATORS IN PL/SQL
    ===============================================
    Release 8.1.5 PL/SQL에서는 CUBE, ROLLUP 이 지원되지 않는다. 8i에서는 DBMS_SQL
    package을 이용하여 dynamic SQL로 구현하는 방법이 workaround로 제시된다.
    Ordacle8i에서는 PL/SQL block에 SQL절을 직접적으로 위치시키는 Native Dynamic SQL
    (참고 bul#11721)을 지원한다.
    Native Dynamic SQL을 사용하기 위해서는 COMPATIBLE 이 8.1.0 또는 그 보다 높아야
    한다.
    SVRMGR> show parameter compatible
    NAME TYPE VALUE
    compatible string 8.1.0
    예제 1-1: ROLLUP -> 위의 예제 1과 비교한다.
    SQL> create or replace procedure test_rollup as
    my_year test_roll.year%type;
    my_region test_roll.region%type;
    my_sum int;
    my_count int;
    begin
    select year, region, sum(profit), count(*)
    into my_year, my_region, my_sum, my_count
    from test_roll
    group by rollup(year, region);
    end;
    Warning: Procedure created with compilation errors.
    SQL> show errors
    Errors for PROCEDURE TEST_ROLLUP:
    LINE/COL ERROR
    10/8 PL/SQL: SQL Statement ignored
    13/18 PLS-00201: identifier 'ROLLUP' must be declared
    SQL> create or replace procedure test_rollup as
    type curTyp is ref cursor;
    sql_stmt varchar2(200);
    tab_cv curTyp;
    my_year test_roll.year%type;
    my_region test_roll.region%type;
    my_sum int;
    my_count int;
    begin
    sql_stmt := 'select year, region, sum(profit), count(*) ' ||
    'from test_roll ' ||
    'group by rollup(year, region)';
    open tab_cv for sql_stmt;
    loop
    fetch tab_cv into my_year, my_region, my_sum, my_count;
    exit when tab_cv%NOTFOUND;
    dbms_output.put_line (my_year || ' '||
    nvl(my_region,' ') ||
    ' ' || my_sum || ' ' || my_count);
    end loop;
    close tab_cv;
    end;
    SQL> set serveroutput on
    SQL> exec test_rollup
    1995 Central 100 1
    1995 East 200 2
    1995 West 200 2
    1995 500 5
    1996 West 200 2
    1996 200 2
    700 7
    PL/SQL procedure successfully completed.
    예제 2-1: ROLLUP and GROUPING() -> 위의 예제 2와 비교한다.
    SQL> create or replace procedure test_rollupg as
    my_year test_roll.year%type;
    my_region test_roll.region%type;
    my_sum int;
    my_count int;
    my_g_region int;
    my_g_year int;
    begin
    select year, region, sum(profit),
    grouping(year), grouping(region)
    into my_year, my_region, my_sum, my_count,
    my_g_year, my_g_region
    from test_roll
    group by rollup(year, region);
    end;
    Warning: Procedure created with compilation errors.
    SQL> show error
    Errors for PROCEDURE TEST_ROLLUPG:
    LINE/COL ERROR
    12/4 PL/SQL: SQL Statement ignored
    17/13 PLS-00201: identifier 'ROLLUP' must be declared
    SQL> create or replace procedure test_rollupg as
    type curTyp is ref cursor;
    sql_stmt varchar2(200);
    tab_cv curTyp;
    my_year test_roll.year%type;
    my_region test_roll.region%type;
    my_sum int;
    my_count int;
    my_g_region int;
    my_g_year int;
    begin
    sql_stmt := 'select year, region, sum(profit), count(*), ' ||
    'grouping(year), grouping(region) ' ||
    'from test_roll ' ||
    'group by rollup(year, region)';
    open tab_cv for sql_stmt;
    loop
    fetch tab_cv into my_year, my_region, my_sum, my_count,
    my_g_year, my_g_region;
    exit when tab_cv%NOTFOUND;
    dbms_output.put_line (my_year || ' '||my_region ||
    ' ' || my_sum || ' ' || my_count ||
    ' ' || my_g_year || ' ' || my_g_region);
    end loop;
    close tab_cv;
    end;
    Procedure created.
    SQL> set serveroutput on
    SQL> exec test_rollupg
    1995 Central 100 1 0 0
    1995 East 200 2 0 0
    1995 West 200 2 0 0
    1995 500 5 0 1
    1996 West 200 2 0 0
    1996 200 2 0 1
    700 7 1 1
    PL/SQL procedure successfully completed.
    예제 3-1: CUBE -> 위의 예제 3과 비교한다.
    SQL> create or replace procedure test_cube as
    my_year test_roll.year%type;
    my_region test_roll.region%type;
    my_sum int;
    my_count int;
    begin
    select year, region, sum(profit), count(*)
    into my_year, my_region, my_sum, my_count
    from test_roll
    group by cube(year, region);
    end;
    Warning: Procedure created with compilation errors.
    SQL> show error
    Errors for PROCEDURE TEST_CUBE:
    LINE/COL ERROR
    10/4 PL/SQL: SQL Statement ignored
    13/13 PLS-00201: identifier 'CUBE' must be declared
    SQL> create or replace procedure test_cube as
    type curTyp is ref cursor;
    sql_stmt varchar2(200);
    tab_cv curTyp;
    my_year test_roll.year%type;
    my_region test_roll.region%type;
    my_sum int;
    my_count int;
    begin
    sql_stmt := 'select year, region, sum(profit), count(*) ' ||
    'from test_roll ' ||
    'group by cube(year, region)';
    open tab_cv for sql_stmt;
    loop
    fetch tab_cv into my_year, my_region, my_sum, my_count;
    exit when tab_cv%NOTFOUND;
    dbms_output.put_line (my_year || ' '||
    nvl(my_region,' ') ||
    ' ' || my_sum || ' ' || my_count);
    end loop;
    close tab_cv;
    end;
    Procedure created.
    SQL> set serveroutput on
    SQL> exec test_cube
    1995 Central 100 1
    1995 East 200 2
    1995 West 200 2
    1995 500 5
    1996 West 200 2
    1996 200 2
    Central 100 1
    East 200 2
    West 400 4
    700 7
    PL/SQL procedure successfully completed.
    예제 4-1: CUBE and GROUPING() -> 위의 예제 4와 비교한다.
    SQL> create or replace procedure test_cubeg as
    my_year test_roll.year%type;
    my_region test_roll.region%type;
    my_sum int;
    my_count int;
    my_g_region int;
    my_g_year int;
    begin
    select year, region, sum(profit),
    grouping(year), grouping(region)
    into my_year, my_region, my_sum, my_count,
    my_g_year, my_g_region
    from test_roll
    group by cube(year, region);
    end;
    Warning: Procedure created with compilation errors.
    SQL> show error
    Errors for PROCEDURE TEST_CUBEG:
    LINE/COL ERROR
    12/4 PL/SQL: SQL Statement ignored
    17/13 PLS-00201: identifier 'CUBE' must be declared
    SQL> create or replace procedure test_cubeg as
    type curTyp is ref cursor;
    sql_stmt varchar2(200);
    tab_cv curTyp;
    my_year test_roll.year%type;
    my_region test_roll.region%type;
    my_sum int;
    my_count int;
    my_g_region int;
    my_g_year int;
    begin
    sql_stmt := 'select year, region, sum(profit), count(*), ' ||
    'grouping(year), grouping(region) ' ||
    'from test_roll ' ||
    'group by cube(year, region)';
    open tab_cv for sql_stmt;
    loop
    fetch tab_cv into my_year, my_region, my_sum, my_count,
    my_g_year, my_g_region;
    exit when tab_cv%NOTFOUND;
    dbms_output.put_line (my_year || ' '||my_region ||
    ' ' || my_sum || ' ' || my_count ||
    ' ' || my_g_year || ' ' || my_g_region);
    end loop;
    close tab_cv;
    end;
    Procedure created.
    SQL> set serveroutput on
    SQL> exec test_cubeg
    1995 Central 100 1 0 0
    1995 East 200 2 0 0
    1995 West 200 2 0 0
    1995 500 5 0 1
    1996 West 200 2 0 0
    1996 200 2 0 1
    Central 100 1 1 0
    East 200 2 1 0
    West 400 4 1 0
    700 7 1 1
    PL/SQL procedure successfully completed.
    Reference Ducumment
    Note:67988.1

    Hello,
    As previously posted you should use export and import utilities.
    To execute exp or imp statements you have just to open a command line interface, for instance,
    a DOS box on Windows.
    So you don't have to use SQL*Plus or TOAD.
    About export/import you may care on the mode, to export a single or a list of Tables the Table mode
    is enough.
    Please, find here an example to begin:
    http://wiki.oracle.com/page/Oracle+export+and+import+
    Hope this help.
    Best regards,
    Jean-Valentin

  • Dynamic SQL and Bulk Bind... Interesting Problem !!!

    Hi Forum !!
    I've got a very interesting problem involving Dynamic SQL and Bulk Bind. I really Hope you guys have some suggestions for me...
    Table A contains a column named TX_FORMULA. There are many strings holding expressions like '.3 * 2 + 1.5' or '(3.4 + 2) / .3', all well formed numeric formulas. I want to calculate each formula, finding the number obtained as a result of each calculation.
    I wrote something like this:
    DECLARE
    TYPE T_FormulasNum IS TABLE OF A.TX_FORMULA%TYPE
    INDEX BY BINARY_INTEGER;
    TYPE T_MontoIndicador IS TABLE OF A.MT_NUMBER%TYPE
    INDEX BY BINARY_INTEGER;
    V_FormulasNum T_FormulasNum;
    V_MontoIndicador T_MontoIndicador;
    BEGIN
    SELECT DISTINCT CD_INDICADOR,
    TX_FORMULA_NUMERICA
    BULK COLLECT INTO V_CodIndicador, V_FormulasNum
    FROM A;
    FORALL i IN V_FormulasNum.FIRST..V_FormulasNum.LAST
    EXECUTE IMMEDIATE
    'BEGIN
    :1 := TO_NUMBER(:2);
    END;'
    USING V_FormulasNum(i) RETURNING INTO V_MontoIndicador;
    END;
    But I'm getting the following messages:
    ORA-06550: line 22, column 43:
    PLS-00597: expression 'V_MONTOINDICADOR' in the INTO list is of wrong type
    ORA-06550: line 18, column 5:
    PL/SQL: Statement ignored
    ORA-06550: line 18, column 5:
    PLS-00435: DML statement without BULK In-BIND cannot be used inside FORALL
    Any Idea to solve this problem ?
    Thanks in Advance !!

    Hallo,
    many many errors...
    1. You can use FORALL only in DML operators, in your case you must use simple FOR LOOP.
    2. You can use bind variables only in DML- Statements. In other statements you have to use literals (hard parsing).
    3. RETURNING INTO - Clause in appropriate , use instead of OUT variable.
    4. Remark: FOR I IN FIRST..LAST is not fully correct: if you haven't results, you get EXCEPTION NO_DATA_FOUND. Use Instead of 1..tab.count
    This code works.
    DECLARE
    TYPE T_FormulasNum IS TABLE OF VARCHAR2(255)
    INDEX BY BINARY_INTEGER;
    TYPE T_MontoIndicador IS TABLE OF NUMBER
    INDEX BY BINARY_INTEGER;
    V_FormulasNum T_FormulasNum;
    V_MontoIndicador T_MontoIndicador;
    BEGIN
    SELECT DISTINCT CD_INDICATOR,
    TX_FORMULA_NUMERICA
    BULK COLLECT INTO V_MontoIndicador, V_FormulasNum
    FROM A;
    FOR i IN 1..V_FormulasNum.count
    LOOP
    EXECUTE IMMEDIATE
    'BEGIN
    :v_motto := TO_NUMBER('||v_formulasnum(i)||');
    END;'
    USING OUT V_MontoIndicador(i);
    dbms_output.put_line(v_montoindicador(i));
    END LOOP;
    END;You have to read more about bulk- binding and dynamic sql.
    HTH
    Regards
    Dmytro
    Test table
    a
    (cd_indicator number,
    tx_formula_numerica VARCHAR2(255))
    CD_INDICATOR TX_FORMULA_NUMERICA
    2 (5+5)*2
    1 2*3*4
    Message was edited by:
    Dmytro Dekhtyaryuk

  • How to populate a dynamic table according to the choice of the viewer

    Hi there,
    I ran into a dead-end on my  "Events" page.
    There is a dynamic table getting the info from a database. It will initially show the Upcoming Events.
    At this point my question is this:
    *Can I populate the dynamic table based on a condition where the current date and the event date (as in the db) will be compared and if the event date is later than the current date, it will be displayed in the table. Otherwise, it won't.
    If I can do that, can someone please help me out with the code?
    Besides that, on the right side of the page there are 3 options for the viewer:
    1. View upcoming events
    2. View past events
    3. Search events by month and year
    What I want to do is that when the viewer clicks on 'past events', the table will be reset and populated with those events whose date has passed.
    When the viewer clicks on "upcoming events", the table is reset again and populated with the relevant events.
    When the viewer selects a month and a year, search the database to find the relevant records.
    Can all of this be written in php? Since I read smwhere that php doesn't work with onclick functions... i got confused. Cuz the data in my table will have to vary depending on what the viewer is clicking (upcoming events/past events/search events). I do not wish to create separate pages for each type of event.
    If anybody has a better suggestion to carry out this task, please share!
    Thanks!

    >Can I populate the dynamic table based on a condition where the current date and the event date (as in the db)
    >will be compared and if the event date is later than the current date, it will be displayed in the table. Otherwise, it won't.
    Of course. You just need to compare the date field in your database with the current date as returned by your DBMS date function. Assuming you are using MySQL, you would compare your column with the currdate() function and use the appropriate greater than/ less than operators in the SQL WHERE clause. If you don't know what a WHERE clause is then I would urge you to learn SQL as soon as possible. You can't build data driven sites without a basic understanding of SQL.
    >Since I read smwhere that php doesn't work with onclick functions..
    What this means is that php is a server side language, where user interactions always occur at the client site. But that does not mean you can't invoke a server side action from a client side event. You most certainly can and would.
    You might consider adding links to the dynamic table page that pass a querystring to the php script which determine what filter to add in the WHERE clause- greater than the current date, less than, etc.
    Also, in the future, please post these questions to the application development forum.

  • How to validate column name in dynamic made sql?

    Oracle db, jdbc, web app with struts2/spring.
    Example table could be this:
    CREATE TABLE album
    album_id number(10)  not null,
      artist  varchar2(50) not null,
    title  varchar2(50) not null,
      released  DATE,  
      CONSTRAINT album_pk PRIMARY KEY (album_id)
    );In may app the user MAY search, MAY sort, and the result from an select might return 10.000 rows.
    The basic sql usually look like this.
    String sql = "select album_id, artist, title, released from album";Then in the html page the user can add search criteria for each column. Like type "iron maiden" in artist field, put "1982" in released field. And you all know what the exceptionally result should be from that :)
    Now I need to modify the sql a bit:
    if( artist search field contains stuff )
       sql = sql + " where nvl( artist,' ') like ?"
    }we try use prepared statements right? So we use ? as placeholders, and then add "iron maiden" into this statement later on.
    Nice, no big fuzz right, and pretty safe from sql injections i guess.
    But now I have to have an if/else for every single field in the table. Boring. In my app I got like 25 tables like this, with 20 columns minimum. Copy/Paste have never been so boring.
    I also might have to add "order by" with user selected columns and their order. I have to count the query to get total result in case i got to split it up in pages. So there is alot of if/else and sql = sql + "more stuff", and sticking to ? and pure prepared statements is impossible.
    But doing this is not good either:
    for( each element in a map)
      sql = sql + " and nvl( " + key + ",' ') like ?"
    }Where key is "artist".
    In struts and other tag libs its easy to make kode like:
    <s:textfield name="model.addSearch( 'artist' )" value="%{model.getSearch( 'artist' )}" size="30" />
    Silly example maybe, but just to make a point.
    Inputed values in an html form, can very easily be a part of a dynamic created sql - which becomes a security problem later on.
    Artist is an column name. Key should be validated if it contained an valid column name.
    I could make a list of strings, containing valid column names to check against.
    My question is if there is possible to get this type of information from the database, so I don't have to hand-make these lists?
    But I also want to keep the number of heavy and slowing queries down.
    My app have like 25 tables now, and I could easily get away with hand-make everything, copy/paste around etc. But I have more projects and this question will be here next time too. And after there again...

    Etharo wrote:
    Metadata. Then I have to query the database, take the result and use it for validating of input. If my sql only query 1 table, then this is ok. In this case I could do with that. But if the sql query mutliple tables, with sub-selects, unions etc. Then I might have to query all tables first, and even then I might not have what I want.
    The best way is of course to run the query, then get the metadata from that query - cause then im 100% sure what columns will be returned, and then I can validate with that.... 1 query is often not that slow. But I might query once to find total number of rows the query return in order to decide if we need to page the result. then query to get the metadata for validating input, then query to get the result... Maybe this is ok -but my head don't like it as an general ok thing to do, but I can't really say why...If you have a gui screen then it needs to correspond to some specific query. It can't be all possible combinations.
    So once you know the query you can obtain the meta data using a query that returns no results. Like the following.
    select * from mytable wheren 1 = 0
    >
    Jschell:
    I agree to what you say. I don't understood everything you said tho.
    Im not sure if you talk about having 1 search field (like google), and you input stuff there that might be in any columns.
    I have several search fields in one-to-one relasionship with view column/sql query column.
    Then you already know what the field represents. So validate it in the gui and not via the database.
    The first is way more advanced since you have to cover any input, any column, any case etc. Pluss add ranking. Lots of work for someone who have done little searchengines.
    Latter is simpler, but might also be limiting.Huh?
    As an example if you have a call center then the operators are not going to be doing unrestricted searches to find customers. They are going to look using a very limited set of data like the customer name and telephone number.
    >
    My job is very much like an consulent. They got an app, I shall add a new feature. The app is old and ugly coded. My boss ask how long it takes to make this, I say 2months, he decide 1 month. My dev time for features is rarely above 1 month, and I don't make much new apps.
    So I don't have the time to make advanced codegenerator, or spend time to evaluate various frameworks. Bringing an framework into the existing code is actually difficult. But I do want to improve the code, and add good code into the existing app that can be extended without evil pain.
    That doesn't jive with your OP. You made the following statement "My app have like 25 tables now, and I could easily get away with hand-make everything,...".
    That suggests that you are doing much more than simply updating an existing application.
    If you only need to add one new field then you should do only that. You shouldn't be attempting to add a system spanning validation system.
    On the other hand if you are in fact adding a validation system, then code generation makes it likely that it would take less time or no more than the same. And it is less likely to introduce bugs.
    Learn how to make an code generator? Well I guess thats what I asked help for - point me in the right direction if you could pls. Putting strings together to become code in an logic way is usually manageable, at least for simple querys. Evaluating that the generated code is good/safe - got no good clues...
    Learn about frameworks? Got no time. Hope I will get the time, but I won't. The customer must want to spend the money so I can get the time, that won't happen cause an framework does not add features, its only cost saving in terms of dev time, and maintenance time. The customer have no such focus/interest. They got a bit money to spend now and then regularily. i.e. government.
    I just want to try code as good as possible so I save myself from errors, painfull rewrites, and dev-time that gets out of proportions because of stupid code. So the question is actually about me trying to improve myself, its just that i don't know how right now.There are two goals.
    1. Implement a specific feature in an existing application.
    2. Learn a new way to solve problems.
    Nothing says that the second will help with the first. They should be addressed separately and your post doesn't make it clear what the first is so it is hard to say how it should be down.
    As for the second I already made a suggestion which provides two new ways to solve problems.

  • Help with Dynamic Calc

    Hello, could someone help me why after creating the dynamic calc member below, our calc script somehow get stuck/ ran very very slow...
    Below is currently our Hierararchy for Division dimension:
    Division Dimension
    Division Rollup ( Never Share)
    Division 1 ( Never Share)
    Division a (Never Share) level 0
    Division b (Never Share) level 0
    Division c (Never Share) level 0
    Division 2 (Never Share)
    Division d ( Never Share) level 0
    Alt_Division without cd (Dynamic Calc) ...and the member formula I did is
    ="Division Rollup" - "Division c" - "Division d" ;
    After I refresh, the Alt_Division without cd went fine, calculated correctly when I retreive in Essbase Escel , however, the big problem was, when we run our aregular Essbase calc scripts, it somehow got stuck with Alt_Division without cd member and the calc went very very slow almost to the point that it just stopped calcing.
    Could you please let me know if there is something wrong with my dynamic calc member above... Should the Alt_Division dynamic calc should not be a sibling of the Division Rollup member? or I could not use the "Division Rollup" member .
    Could you please recommend a better way of writing the dynamic calc member ( and it's position in the Hierarchy) ... without me aggregarting the dbase ...( I like dynamic calc since it aggs on the fly).
    Please advise.
    Thanks.

    Few Things...
    I am assuming Division is a sparse Dimension. A Dynamic Calc member formula on a Sparse dimension member will surely take lots of time.
    Suggestion 1:
    Create an Alternate hierarchy sharing c and d. Change the consolidation operators to get the C - D at Alt_Hierarchy.
    Suggestion 2:
    Make the member Store and put the desired calculation in a Calculation script rather than having it as a dynamic calc member formula.
    Hope this helps.
    Madhavi

  • LMS 2.6 dynamic groups with wildcards

    Is is possible to build dynamic groups in RME using wildcards or regular expresions? The rules that I want to define would look similar to the following:
    Device.System.Name StartsWith "SW" AND (
    Device.System.Name contains "........X" OR
    Device.System.Name contains "........Y" OR
    Device.System.Name contains "........E" OR
    Device.System.Name contains "........Z")
    Where the device name begins with SW and there is either an X, Y, E or Z in the 8th position of the device name.

    This is not possible. The ruleset matching is based only on the operators available for the given property.
    The best workaround I can give you is to apply your first rule, then manually adjust the membership list based on the other rules. The downside of this is that the membership list would require modification when you add new devices.

  • Operators in advanced search view

    Hi Experts,
    could you tell me how the available operators are determined in advanced search views?
    I build a search view based on a own custom BOL and want to remove some operators now.
    Thanks in advance!
    Best regards,
    Alex

    Nevermind!
    Solution: Component Specific Settings -> Define Operators for Dynamic Queries in SPro.

  • InterMedia Text Query in Dynamic SQL

    I have a query using score and contains interMedia operators that runs without problem from the SQL*Plus command line, but generates a "ORA-01858: a non-numeric character was found where a numeric was expected" error when run via dynamic sql.
    The query runs something like this:
    select
    score(1),
    score(2),
    a.field1,
    b.field2
    from
    a,
    b,
    where
    b.id (+)= a.id and
    b.name (+)= 'test' and
    ((contains(a.content, 'query', 1) +
    (contains(b.valud, 'query', 2)) > 0
    I'm trying to avoid an OR clause by adding the two contains clauses together. Could this error be caused by the outer join on table b? If so, why does it run without problems from SQLPlus?
    null

    Thanks for the help.
    Can you give me an example of how I have to specify the url in the database? For my intranet websites, I was able to use the foln. two formats http://host1/asptest/index.html (and)
    URL:http://scott:tiger@host1:80/asptest/index.html
    where host1 is the name of the host and 80, the port number.
    I need to be able to access the oracle website(http://www.oracle.com/index.html) and run the foln. query,
    SELECT id, url FROM test WHERE CONTAINS(url, 'Education')>0;
    I tried setting the HTTP_PROXY attribute of the URL_DATASTORE, and specified the url as http://www.oracle.com/index.html in the database, but that didn't seem to help.
    Thanks.
    null

  • Dynamic sql in field of query

    Hello friends,
    I have a struct bellow:
    -- tanks: tanks of corporation
    create table tanks
    owner varchar2(6) not null,
    tank_id varchar2(6) not null,
    oil_volume number not null,
    water_volume number not null,
    availabled char(1) --> calculated. true (1), false (0)
    primary key (tank_id, owner)
    insert into tanks (owner, tank_id, oil_volume, water_volume)
    select 'L', 'tank_A', 6, 10 from dual union
    select 'L', 'tank_B', 7, 1 from dual union
    select 'M' 'tank_C', 9, 7 from dual;
    /* available_tank_rules:
    table that defines the availability rules of a tank of corporate
    if any of the rules is false, the tank's availability is also false
    create table available_tank_rules
    owner varchar2(6),
    column_name varchar2(10),
    operator_type varchar2(2),
    value_ number,
    primary key (owner, column_name)
    alter table available_tank_rules
    add constraint CK_1
    check (operador_type in ('>', '>=', '<', '<=', '='));
    insert into available_tank_rules (owner, column_name, operator_type, value_in_test)
    select 'L', 'oil_volume', '>=', 6 from dual union
    select 'L', 'water_volume', '=', 1 from dual union
    select 'M', 'water_volume', '<', 3 from dual union
    select from dual;
    -- how to execute this expression dynamically on a sql query?
    --I need this output of available_tank_rules table:
    owner, tank_id , oil_volume, water_volume, availabled
    'L' , 'tank_A', 6 , 10 , 0
    'L' , 'tank_B', 3 , 1 , 1
    'M' , 'tank_C', 9 , 7 , 0
    thanks.

    Should be possible with a method like this:
    SQL> with tanks as (
    select 'L' owner, 'tank_A' tank_id, 6 oil_volume, 10 water_volume from dual union
    select 'L',       'tank_B',         7,             1              from dual union
    select 'M',       'tank_C',         9,             7              from dual
    available_tank_rules as (
    select 'L' owner, 'oil_volume' column_name, '>=' operator_type, 6 value_in_test from dual union
    select 'L',       'water_volume',           '=',                1               from dual union
    select 'M',       'water_volume',           '<',                3               from dual
    select owner,
           tank_id,
           oil_volume,
           water_volume,
           case when dbms_xmlgen.getxml('select * from dual where ' || cond) is not null then 1 else 0 end available
      from (
            select t.*,
                  nvl((select t.oil_volume || operator_type || value_in_test from available_tank_rules a where t.owner=a.owner and column_name = 'oil_volume'),'1=1') || ' and ' ||
                  nvl((select t.water_volume || operator_type || value_in_test from available_tank_rules a where t.owner=a.owner and column_name = 'water_volume'),'1=1') cond
              from tanks t)
    O TANK_I OIL_VOLUME WATER_VOLUME  AVAILABLE
    L tank_A          6           10          0
    L tank_B          7            1          1
    M tank_C          9            7          0but I strongly suggest to rethink your design. To store conditions and operators in a table is certainly not the way to go ...

  • Advanced Search using conditional & logical operators+ sharepoint 2010

    Hi Team,
    We have an requirement something like this. we have to search values from Custom SharePoint List using Conditional & Logical Operators in SharePoint 2010. how can i achieve this ? if some one has worked on something like this, can you please share the
    details to my email id ([email protected]
    Thanks in Advance.
    Cheers, San

    Hi Santhosh,
    If you have only one list, then you can use CAML query to perform search in that list. You can write code to generate dynamic CAML based on selection in the filter.
    If have to perform the search function on multiple list then you can use Search object model and create dynamic query and execute it using Search OM.
    http://msdn.microsoft.com/en-us/library/office/dn423226(v=office.15).aspx
    Best Regards,
    Brij K

  • Dynamic PL/SQL Questions

    Hi,
    I like to choose one among the operators coming from the web page.
    Like >, <, >=, Between etc etc ..
    Using this I have to execute a certain query.
    For eg in the case of > I will execute total_amount > amount;
    in the case of < I will execute total_amount < amount;
    but in the case of between, I will execute total_amount between min_amount and max_amount.
    I am trying to use the dynamic SQL to code this where condition and using it in the cursor to fetch data. Please suggest me a solution to resolve this without duplicating the query that many times as the operator.
    I have attached the query for your perusal.
    WHEN oppsRange = 'EQ' THEN
         oppsclause := 'AND d1.TOTAL_AMOUNT = :V1';
    WHEN oppsRange = 'LT' THEN
         oppsclause := 'AND d1.TOTAL_AMOUNT < :V1';
         WHEN oppsRange = 'GT' THEN
         oppsclause := 'AND d1.TOTAL_AMOUNT > :V1';
         WHEN oppsRange = 'LE' THEN
         oppsclause := 'AND d1.TOTAL_AMOUNT <= :V1';
         WHEN oppsRange = 'GE' THEN
         oppsclause := 'AND d1.TOTAL_AMOUNT >= :V1';
         WHEN oppsRange = 'NE' THEN
         oppsclause := 'AND d1.TOTAL_AMOUNT <> :V1';
         WHEN oppsRange = 'BT' THEN
         oppsclause := 'AND d1.TOTAL_AMOUNT BETWEEN :V1 AND :V2';
         WHEN oppsRange = 'ALL' THEN
         oppsclause := 'AND';
         END CASE;
         DBMS_OUTPUT.PUT_LINE(oppsRange || oppsclause);
         OPEN tot FOR
         'select DISTINCT a1.SALESREPID, d1.lead_id, d1.total_amount, d1.status from EMCSV_R25_DIST_PROF_TBL a1,
                   jtf_rs_resource_extns b1,
                   as_accesses_all_all c1,
                                                                     as_leads_all d1
         where a1.userid = :V1 and
                                                 b1.resource_id = a1.SALESREPID and
                   c1.PERSON_ID = b1.SOURCE_ID and
                                                           d1.lead_id = c1.lead_id' || oppsclause || 'ORDER BY a1.SALESREPID'                                                             
              using userID, oppsMin , oppsMax;
              LOOP
              FETCH tot INTO salesrep, leadID , opps_amount, opps_status;
              EXIT WHEN tot%NOTFOUND;
              DBMS_OUTPUT.PUT_LINE('Sales Reps ' || ' ' || salesrep ||
              'leadID ' || ' ' || leadID ||
              'Opportunity Status' || ' ' || opps_status ||
              'Opportunity Amount' || ' ' || opps_amount);
              END LOOP;
              CLOSE tot;

    Hi
    What's wrong with your solution?
    I think easier to manage your solution than to develop a complete sql analyzer.
    Ott Karesz
    http://www.trendo-kft.hu

  • Is it possible to remove properties from a dynamic class?

    I have a dynamic ActionScript Class that is used to send
    parameters to a WebService. Some of these parameters are always
    present, so they are public properties of the Class:
    package
    [Bindable]
    public dynamic class WebServiceCriteria
    public var property1:int;
    public var property2:String;
    public var property3:String;
    public var property4:String;
    But, I am also adding properties at runtime that can change
    over time:
    criteria.runTimeProperty = "1";
    I'm not very familiar with using dynamic classes, so I was
    wondering if it is possible to "remove" the new property. Let's say
    the next time I call the WebService I don't want that property sent
    - not even as a null. How can I remove it from the Class instance
    without creating a new instance each time?

    Hi,
    Please try delete criteria.runTimeProperty. Please find more
    details on the delete operator at the URL below.
    http://livedocs.adobe.com/flex/3/langref/operators.html#delete
    Hope this helps.

  • Dynamic Implicit Structure Creation Question

    Hello,
    I was curious if it was possible to dynamically create an implicit structure where you might occasionally want to omit some keys from being added to the structure?
    I played around with using ternary operators in the structure creation with no luck.
    <cfset temp = {
         name = "Dave",
         (1 IS 1 ? "" : Job  =  "Superhero")
      } />
    The only way I can see doing this now would be to create the structure and then use StructKeyDelete on the keys I want to remove OR build structures the traditional way and cfif my way around the keys I don't want to add."
    Ex: <cfset structKeyDelete(temp,"Job") />
    or
    <cfset temp = structNew() />
    <cfset temp.name = "Dave" />
    <cfif 1 NEQ 1>
          <cfset temp.job = "Superhero" />
    </cfif>
    Does anyone know how to create dynamic keys in a structure while defining it implicitly?
    Thanks!

    I can think of at least one reason why this fails. If there is just one key-value pair, there will be a comma stranded at the end.
    You can of course tinker dynamically with the content of the keys of a struct and their respective values. However, a struct is an object, with set characteristics such as number of key-value pairs. So, it would be difficult to dynamically change the number of key-value pairs 'from within' the struct. Even if what you are trying to do were possible, it would be more complex, and would certainly involve more code, than the ordinary alternative you mention.
    In any case, here is a version of your original idea that works:
    <cfset temp = (1 IS 2 ? {name="Dave"} : {name="Dave",Job="Superhero"})>
    <cfdump var="#temp#">

  • Operators in drop down

    Hi All,
    I want to display Operators(>,< ,=) in dashboard prompt.
    Based on the operator selection report should dynamically change the data.
    Could anyone please advice on this?
    Thanks,
    Suresh.

    Check this..
    http://oraclebizint.wordpress.com/2008/02/19/oracle-bi-ee-101332-passing-operators-in-dashboard-prompts-go-url-and-presentation-variables/

Maybe you are looking for