表a:
列名:id  col1  col2  col3
值:   1   5      6     7
       2   10     1     5表b:
列名:id   colName  factColName   userId
值:   1     col1      价格         1
       2     col1      汇率         2我解释一下,这是一个创建动态列的过程,表a 为动态列的值表,而表b 为动态列的定义表。
也就是说,系统预留了3列,由用户自己来定义列的相关信息。
用户1创建了一列,实际列名为价格,并且对应的值为5,即  价格=5
用户2创建了一列,实际列名为汇率,对应值为10,即  汇率=10问题:
1. 在界面上做新增操作,有一个输入框来输入价格,比如用户输入了5,我必须根据表b查到col1,并且在表a中的col1插入数值5.请问这个SQL语句如何写?
2. 在界面上做查询操作,一个查询条件是价格,比如输入了5,我需要得到表a中的id=1的这条记录,这个sql语句应该如何写?
3. 上面的查询和新增操作,不知道用hibernate该如何实现?急啊,大家帮帮忙,解决马上给分!见者有份!

解决方案 »

  1.   

    >>1. 在界面上做新增操作,有一个输入框来输入价格,比如用户输入了5,我必须根据表b查到col1,并且在表a中的col1插入数值5.请问这个SQL语句如何写? 
    完全不知道你在说什么
      

  2.   

    第一问: 
     得到col1.... select colName from b where factColName='价格'
     插入数据....  insert into a(col1) values('5')第二问:
     雷同第一问的 得到 col1
     查询数据.... select col1 from a where id='1'第三问:
     ......
     hibernate 个人感觉速度很慢 还是直接用语句比较快
      

  3.   

    楼主的需求有点很难理解,伤脑筋阿,最好讲的明白一些。
    你需求的前提一定要确定:
    首先根据b表的factColName和userId一定要能确定唯一的colName和id,
    这样才能满足你的要求。
    问题一:
    create or replace procedure add_sel(l_val number) is
    sql_str varchar2(2000);
    temp varchar2(20);
    temp_col varchar2(20);
    temp_id number;
    begin 
       select colname,id into temp_col,temp_id from sel2 where factColName='价格' and userid=1;
       sql_str:='update sel1 set '||temp_col||'='||l_val||' where id='||temp_id;
       execute immediate sql_str; 
    end add_sel;
    /问题二:
    select * from sel1 where id=(select id from sel2 where factColName='价格' and userid=1);
    ###############################################
    SQL> select * from sel1;        ID       COL1       COL2       COL3
    ---------- ---------- ---------- ----------
             1          5          6          7
             2          0          0          0SQL> select * from sel2;        ID COLNAME              FACTCOLNAME              USERID
    ---------- -------------------- -------------------- ----------
             1 col1                 价格                          1
             2 col1                 汇率                          2SQL> exec add_sel(100);PL/SQL 过程已成功完成。SQL> select * from sel1;        ID       COL1       COL2       COL3
    ---------- ---------- ---------- ----------
             1        100          6          7
             2          0          0          0SQL> select * from sel1 where id=(select id from sel2 where factColName='价格' and userid=1);        ID       COL1       COL2       COL3
    ---------- ---------- ---------- ----------
             1        100          6          7
      

  4.   

      关于问题1:
      按照道理来说,你的价格的输入框也应该是动态产生的才对,因为只有当你数据库中有用户建立这个属性了,输入框才应该产生,如果是这样的话,当你对输入框赋值的时候,你应该已经知道b表的userid和b表的colName,按照这两个条件直接找到a进行insert的操作就可以了。
      如果你的输入框是静态的,那么你只能先对b表进行判断,看是否有价格这个属性,对应的userid是谁,然后在按照这两个条件对a表操作。