array.sgml
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:3k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. <Chapter Id="arrays">
  2. <Title>Arrays</Title>
  3. <Para>
  4. <Note>
  5. <Para>
  6. This must become a chapter on array behavior. Volunteers? - thomas 1998-01-12
  7. </Para>
  8. </Note>
  9. </Para>
  10. <Para>
  11.      <ProductName>Postgres</ProductName> allows attributes of an instance to be defined
  12.      as  fixed-length  or  variable-length multi-dimensional
  13.      arrays. Arrays of any base type  or  user-defined  type
  14.      can  be created. To illustrate their use, we first create a 
  15.      class with arrays of base types.
  16.      
  17. <ProgramListing>
  18. CREATE TABLE SAL_EMP (
  19.     name            text,
  20.     pay_by_quarter  int4[],
  21.     schedule        text[][]
  22. );
  23. </ProgramListing>
  24. </Para>
  25. <Para>
  26.      The above query will create a class named SAL_EMP  with
  27.      a  <FirstTerm>text</FirstTerm>  string (name), a one-dimensional array of <FirstTerm>int4</FirstTerm>
  28.      (pay_by_quarter),  which  represents   the   employee's
  29.      salary by quarter and a two-dimensional array of <FirstTerm>text</FirstTerm>
  30.      (schedule),  which  represents  the  employee's  weekly
  31.      schedule.   Now  we  do  some  <FirstTerm>INSERTS</FirstTerm>s; note that when
  32.      appending to an array, we  enclose  the  values  within
  33.      braces  and  separate  them  by commas.  If you know <FirstTerm>C</FirstTerm>,
  34.      this is not unlike the syntax for  initializing  structures.
  35.      
  36. <ProgramListing>
  37. INSERT INTO SAL_EMP
  38.     VALUES ('Bill',
  39.     '{10000, 10000, 10000, 10000}',
  40.     '{{"meeting", "lunch"}, {}}');
  41. INSERT INTO SAL_EMP
  42.     VALUES ('Carol',
  43.     '{20000, 25000, 25000, 25000}',
  44.     '{{"talk", "consult"}, {"meeting"}}');
  45. </ProgramListing>
  46.      By  default,  <ProductName>Postgres</ProductName>  uses  the "one-based" numbering
  47.      convention for arrays -- that is, an array  of  n  elements starts with array[1] and ends with array[n].
  48.      Now,  we  can  run  some queries on SAL_EMP.  First, we
  49.      show how to access a single element of an  array  at  a
  50.      time.   This query retrieves the names of the employees
  51.      whose pay changed in the second quarter:
  52.      
  53. <ProgramListing>
  54. SELECT name
  55.     FROM SAL_EMP
  56.     WHERE SAL_EMP.pay_by_quarter[1] &lt;&gt;
  57.     SAL_EMP.pay_by_quarter[2];
  58. +------+
  59. |name  |
  60. +------+
  61. |Carol |
  62. +------+
  63. </ProgramListing>
  64. </Para>
  65. <Para>
  66.      This query retrieves  the  third  quarter  pay  of  all
  67.      employees:
  68.      
  69. <ProgramListing>
  70. SELECT SAL_EMP.pay_by_quarter[3] FROM SAL_EMP;
  71. +---------------+
  72. |pay_by_quarter |
  73. +---------------+
  74. |10000          |
  75. +---------------+
  76. |25000          |
  77. +---------------+
  78. </ProgramListing>
  79. </Para>
  80. <Para>
  81.      We  can  also  access  arbitrary slices of an array, or
  82.      subarrays.  This query  retrieves  the  first  item  on
  83.      Bill's schedule for the first two days of the week.
  84.      
  85. <ProgramListing>
  86. SELECT SAL_EMP.schedule[1:2][1:1]
  87.     FROM SAL_EMP
  88.     WHERE SAL_EMP.name = 'Bill';
  89. +-------------------+
  90. |schedule           |
  91. +-------------------+
  92. |{{"meeting"},{""}} |
  93. +-------------------+
  94. </ProgramListing>
  95. </Para>
  96. </Chapter>