查询效果编号 项1 项2 项3 录入时间
1 10 10 10 2010-06-04
2 20 20 23 2010-06-05
列(项)数量是不固定的,可以有用户自定义添加
请问各位前辈,数据库表怎么设计好,如何查询出来这种效果?   

解决方案 »

  1.   

    用这个视图  all_tab_columns 找到 与表关联的  列
    用 execute immediate 执行么 
      

  2.   


    表设计成这样可以,之后用decode函数显示查询效果吧
      

  3.   


    做法有点像订单和订单明细
     要三张表才能表达出来喔
     主 id 别名 changedtime intime 
     从 主id 项名id 值 intime
     项字典 id 项名 分类要给主表加字段,就都加到字典表里去
    插入时,首先创建主表唯一记录,按照字典或者分类,列出给用户填数据的项,如果某项是没有数据,则可不插入到从表中。
    查询时,按照项字典生成查询列,然后查从表中的数据填入到对应的列中。
            还可以动态按照分类或者用户选择字典中的某几项,作为列,查询从表的记录。
    就是复杂点
      

  4.   

    编号 项1 项2 项3 录入时间
    1 10 10 10 2010-06-04
    2 20 20 23 2010-06-05
    如果说是项1,项2是不确定的 我的理解是可以设计三张表
    一张 编号表 
    编号   录入时间
    1      2010-06-04
    2      2010-06-05
    一张 项表 项id为主键
    项id  项值
    1      10
    2      10
    3      10
    4      20
    一张  编号项关系表 关系id主键
    关系表id  编号  项id
    1          1      1
    2          1      2
    3          1      3

      

  5.   


    create table a(
    a_id NUMBER(20) primary key not null,
    a_date DATE);create table b(
    b_id NUMBER(20) not null,
    b_col VARCHAR2(10), --放列名
    b_val VARCHAR2(40), --列名对应的列值
    constraint CFK foreign key(b_id) references a(a_id));create or replace
    PROCEDURE ADD_AB_DATA
        (v_id in a.A_ID%TYPE,v_col_val in B.B_VAL%TYPE,v_date in a.A_DATE%TYPE)
    AS
      v_num NUMBER;
      TYPE v_array IS TABLE OF VARCHAR2(30);
      v_col v_array := v_array();
      v_val v_array := v_array();
      i NUMBER DEFAULT 1;
      j NUMBER DEFAULT 1;
      k NUMBER DEFAULT 0;
    BEGIN
      v_num:=length(v_col_val)-length(replace(v_col_val,':',''));
      insert into a values(v_id,v_date);
      FOR i IN 1..v_num LOOP
        j := instr(v_col_val,':',1,i);
        v_col.extend;
        v_val.extend;
        v_col(i) := SUBSTR(v_col_val,k+1,j-k-1);
        k := instr(v_col_val,',',1,i);
        IF i < v_num THEN
          v_val(i) := SUBSTR(v_col_val,j+1,k-j-1);
        ELSE
          v_val(i) := SUBSTR(v_col_val,j+1,length(v_col_val)-j);
        END IF;
        dbms_output.put_line('v_col('||i||') = '||v_col(i));
        dbms_output.put_line('v_val('||i||') = '||v_val(i));
        insert into b values(v_id,v_col(i), v_val(i));
      END LOOP;
      
      commit;
      --insert into a values(v_id,v_date);END ADD_AB_DATA;exec add_ab_data(1,'name:tracy,sex:girl,phone:55445','05-MAY-2010');
    --插入数据显示数据要在前台程序端写,把B表的b_col做为列名,再将与期对应的b_val做为列值.
    但因为楼主需求不明确,在插入数据时,要保证每次列值和列数都一样,一个表中,每行的列数不同,是不可以的.只能多建几个表