动态的例程名称规范

通过在调用例程内构建被调用的例程的名称,动态的例程名称规范允许您从另一 SPL 例程执行 SPL 例程。动态的例程名称规范简化您编写调用另一 SPL 例程的 SPL 例程的方式,直到运行时才能知道另一例程的名称。数据库服务器允许您在 EXECUTE PROCEDURE 或 EXECUTE FUNCTION 语句中指定 SPL 变量,而不是 SPL 例程的显式的名称。

在下图中,SPL 过程 company_proc 更新大型的公司销售表,然后,分配名为 salesperson_proc 的 SPL 变量来保存更新另一较小表的动态地创建的 SPL 过程的名称,这个较小的表包含个别销售人员的每月销售情况。

图: 动态的例程名称规范。

CREATE PROCEDURE company_proc ( no_of_items INT,
          itm_quantity SMALLINT, sale_amount MONEY, 
          customer VARCHAR(50), sales_person VARCHAR(30) )
          
          DEFINE salesperson_proc VARCHAR(60);
          
          -- 更新公司表
          INSERT INTO company_tbl VALUES (no_of_items, itm_quantity,
          sale_amount, customer, sales_person); 
          
          -- 生成变量 salesperson_proc 的过程名称
          LET salesperson_proc = sales_person || "." || "tbl" ||
          current_month || "_" || current_year || "_proc" ;
          
          -- 执行 salesperson_proc 变量指定的 
          -- SPL 过程
          EXECUTE PROCEDURE salesperson_proc (no_of_items,
          itm_quantity, sale_amount, customer)
          END PROCEDURE;
在示例中,过程 company_proc 接受五个参数,并将它们插入至 company_tbl 内。然后,LET 语句使用不同的值和连接运算符 || 来产生要执行的另一 SPL 过程的名称。在 LET 语句中:
sales_person
传给 company_proc 过程的参数。
current_month
系统日期中的当前月份。
current_year
系统日期中的当前年份。

因此,如果名为 Bill 的销售人员在 1988 年 7 月完成一笔销售,则 company_proccompany_tbl 中插入一记录,并执行 SPL 过程 bill.tbl07_1998_proc,更新包含个别销售人员的每月销售情况的较小的表。