----------------------------------------------------------------------------- -- (c) Copyright IBM Corp. 2007 All rights reserved. -- -- The following sample of source code ("Sample") is owned by International -- Business Machines Corporation or one of its subsidiaries ("IBM") and is -- copyrighted and licensed, not sold. You may use, copy, modify, and -- distribute the Sample in any form without payment to IBM, for the purpose of -- assisting you in the development of your applications. -- -- The Sample code is provided to you on an "AS IS" basis, without warranty of -- any kind. IBM HEREBY EXPRESSLY DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR -- IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -- MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. Some jurisdictions do -- not allow for the exclusion or limitation of implied warranties, so the above -- limitations or exclusions may not apply to you. IBM shall not be liable for -- any damages you suffer as a result of using, copying, modifying or -- distributing the Sample, even if IBM has been advised of the possibility of -- such damages. ----------------------------------------------------------------------------- -- -- SOURCE FILE NAME: flt.db2 -- -- SAMPLE: How to do a RECURSIVE QUERY -- -- SQL STATEMENTS USED: -- DROP TABLE -- CREATE TABLE -- INSERT -- SELECT -- -- ----------------------------------------------------------------------------- -- -- For more information about the command line processor (CLP) scripts, -- see the README file. -- -- For information on using SQL statements, see the SQL Reference. -- -- For the latest information on programming, building, and running DB2 -- applications, visit the DB2 Information Center: -- http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp ----------------------------------------------------------------------------- create table flights (source varchar (8), destination varchar (8), d_time integer, a_time integer, cost smallint, airline varchar (8)); INSERT INTO FLIGHTS VALUES ('Paris', 'Detroit', null,null,700,'KLM'), ('Paris', 'New York', null,null,600,'KLM'), ('Paris', 'Toronto', null,null,750,'AC'), ('Detroit', 'San Jose', null,null,400,'AA'), ('New York','Chicago', null,null,200,'AA'), ('Toronto', 'Chicago', null,null,275,'AC'), ('Chicago', 'San Jose', null,null,300,'AA'); WITH REACH (SOURCE, DESTINATION, COST, STOPS) AS ( SELECT SOURCE, DESTINATION, COST, CAST(0 AS SMALLINT) FROM FLIGHTS WHERE SOURCE = 'Paris' UNION ALL SELECT R.SOURCE, F.DESTINATION, CAST(R.COST+F.COST AS SMALLINT), CAST(R.STOPS+1 AS SMALLINT) FROM REACH R, FLIGHTS F WHERE R.DESTINATION=F.SOURCE AND R.STOPS < 5 ) SELECT DESTINATION, COST, STOPS FROM REACH; drop table flights;