diff --git a/schema/build.xml b/schema/build.xml index 1dfd64f8..30b4a792 100644 --- a/schema/build.xml +++ b/schema/build.xml @@ -475,7 +475,7 @@ - + diff --git a/schema/src/test/test_grants.sql b/schema/src/test/test_grants.sql index aff00cb5..d7f5dc98 100644 --- a/schema/src/test/test_grants.sql +++ b/schema/src/test/test_grants.sql @@ -28,6 +28,7 @@ GRANT EXECUTE ON &cwms_schema..test_cwms_data_dissem to &1; GRANT EXECUTE ON &cwms_schema..test_cwms_forecast to &1; GRANT EXECUTE ON &cwms_schema..test_cwms_xchg to &1; GRANT EXECUTE ON &cwms_schema..test_cwms_cache to &1; +GRANT EXECUTE ON &cwms_schema..test_level_as_ts to &1; GRANT EXECUTE ON &cwms_schema..test_cwms_fcst to &1; GRANT EXECUTE ON &cwms_schema..test_av_ts_grp_assgn to &1; GRANT EXECUTE ON &cwms_schema..test_av_loc_grp_assgn to &1; diff --git a/schema/src/test/test_level_as_ts.sql b/schema/src/test/test_level_as_ts.sql new file mode 100644 index 00000000..3188482a --- /dev/null +++ b/schema/src/test/test_level_as_ts.sql @@ -0,0 +1,152 @@ +CREATE OR REPLACE package &&cwms_schema..test_level_as_ts as + +--%suite(Test level-as-ts retrieval code) +--%beforeall (setup) +--%afterall(teardown) +--%rollback(manual) + +--%test (Test RETRIEVE_LOC_LVL_VALUES3) +procedure retrieve_level; + +procedure setup; +procedure teardown; +END test_level_as_ts; +/ +grant execute on test_level_as_ts to cwms_user; +CREATE OR REPLACE PACKAGE BODY &&cwms_schema..test_level_as_ts +AS + -------------------------------------------------------------------------------- + -- procedure retrieve_level + -------------------------------------------------------------------------------- + PROCEDURE retrieve_level + IS + location varchar(25) := 'test_level_as_ts'; + level_id varchar(50) := location || '.Flow.Ave.1Day.Regulating'; + seasonal_data seasonal_value_tab_t := seasonal_value_tab_t( + seasonal_value_t(0, 0, 121.5), + seasonal_value_t(0, 15, 150.3), + seasonal_value_t(0, 30, 155.5), + seasonal_value_t(0, 45, 160.3), + seasonal_value_t(0, 60, 165.5), + seasonal_value_t(0, 75, 166.3), + seasonal_value_t(0, 90, 168.5), + seasonal_value_t(0, 105, 170.3), + seasonal_value_t(0, 120, 165.5), + seasonal_value_t(0, 135, 160.3), + seasonal_value_t(0, 150, 155.5), + seasonal_value_t(0, 165, 150.3), + seasonal_value_t(0, 180, 145.5), + seasonal_value_t(0, 195, 140.3), + seasonal_value_t(0, 210, 135.5), + seasonal_value_t(0, 225, 130.3), + seasonal_value_t(0, 240, 127.5), + seasonal_value_t(0, 255, 124.3), + seasonal_value_t(0, 270, 121.5), + seasonal_value_t(0, 285, 126.3), + seasonal_value_t(0, 300, 131.5), + seasonal_value_t(0, 315, 144.3), + seasonal_value_t(0, 330, 152.5), + seasonal_value_t(0, 345, 160.3), + seasonal_value_t(0, 360, 165.5), + seasonal_value_t(0, 375, 160.3), + seasonal_value_t(0, 390, 155.5), + seasonal_value_t(0, 405, 150.3), + seasonal_value_t(0, 420, 143.5)); + + effective_date date := TO_DATE('2026-03-07 20:00:00', 'YYYY-MM-DD HH24:MI:SS'); + origin date := TO_DATE('2026-03-07 20:00:00', 'YYYY-MM-DD HH24:MI:SS'); + minutes number(3) := 435; + units varchar2(3) := 'cms'; + office_id varchar2(3) := '&&office_id'; + + specified_times ztsv_array := ztsv_array( + ztsv_type(TO_DATE('2026-03-07 20:00:00', 'YYYY-MM-DD HH24:MI:SS'), 0, 0), + ztsv_type(TO_DATE('2026-03-07 20:15:00', 'YYYY-MM-DD HH24:MI:SS'), 0, 0), + ztsv_type(TO_DATE('2026-03-07 20:30:00', 'YYYY-MM-DD HH24:MI:SS'), 0, 0), + ztsv_type(TO_DATE('2026-03-07 20:45:00', 'YYYY-MM-DD HH24:MI:SS'), 0, 0), + ztsv_type(TO_DATE('2026-03-07 21:00:00', 'YYYY-MM-DD HH24:MI:SS'), 0, 0), + ztsv_type(TO_DATE('2026-03-07 21:15:00', 'YYYY-MM-DD HH24:MI:SS'), 0, 0), + ztsv_type(TO_DATE('2026-03-07 21:30:00', 'YYYY-MM-DD HH24:MI:SS'), 0, 0), + ztsv_type(TO_DATE('2026-03-07 21:45:00', 'YYYY-MM-DD HH24:MI:SS'), 0, 0), + ztsv_type(TO_DATE('2026-03-07 22:00:00', 'YYYY-MM-DD HH24:MI:SS'), 0, 0), + ztsv_type(TO_DATE('2026-03-07 22:15:00', 'YYYY-MM-DD HH24:MI:SS'), 0, 0), + ztsv_type(TO_DATE('2026-03-07 22:30:00', 'YYYY-MM-DD HH24:MI:SS'), 0, 0), + ztsv_type(TO_DATE('2026-03-07 22:45:00', 'YYYY-MM-DD HH24:MI:SS'), 0, 0), + ztsv_type(TO_DATE('2026-03-07 23:00:00', 'YYYY-MM-DD HH24:MI:SS'), 0, 0), + ztsv_type(TO_DATE('2026-03-07 23:15:00', 'YYYY-MM-DD HH24:MI:SS'), 0, 0), + ztsv_type(TO_DATE('2026-03-07 23:30:00', 'YYYY-MM-DD HH24:MI:SS'), 0, 0), + ztsv_type(TO_DATE('2026-03-07 23:45:00', 'YYYY-MM-DD HH24:MI:SS'), 0, 0), + ztsv_type(TO_DATE('2026-03-08 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), 0, 0), + ztsv_type(TO_DATE('2026-03-08 00:15:00', 'YYYY-MM-DD HH24:MI:SS'), 0, 0), + ztsv_type(TO_DATE('2026-03-08 00:30:00', 'YYYY-MM-DD HH24:MI:SS'), 0, 0), + ztsv_type(TO_DATE('2026-03-08 00:45:00', 'YYYY-MM-DD HH24:MI:SS'), 0, 0), + ztsv_type(TO_DATE('2026-03-08 01:00:00', 'YYYY-MM-DD HH24:MI:SS'), 0, 0), + ztsv_type(TO_DATE('2026-03-08 01:15:00', 'YYYY-MM-DD HH24:MI:SS'), 0, 0), + ztsv_type(TO_DATE('2026-03-08 01:30:00', 'YYYY-MM-DD HH24:MI:SS'), 0, 0), + ztsv_type(TO_DATE('2026-03-08 01:45:00', 'YYYY-MM-DD HH24:MI:SS'), 0, 0), + ztsv_type(TO_DATE('2026-03-08 02:00:00', 'YYYY-MM-DD HH24:MI:SS'), 0, 0), + ztsv_type(TO_DATE('2026-03-08 02:15:00', 'YYYY-MM-DD HH24:MI:SS'), 0, 0), + ztsv_type(TO_DATE('2026-03-08 02:30:00', 'YYYY-MM-DD HH24:MI:SS'), 0, 0), + ztsv_type(TO_DATE('2026-03-08 02:45:00', 'YYYY-MM-DD HH24:MI:SS'), 0, 0), + ztsv_type(TO_DATE('2026-03-08 03:00:00', 'YYYY-MM-DD HH24:MI:SS'), 0, 0) + ); + ts_values ztsv_array := ztsv_array(); + current_date date; + type map is table of boolean index by varchar2(50); + date_map map; + BEGIN + cwms_loc.CREATE_LOCATION(p_location_id=>location, p_db_office_id=>office_id, + p_elevation=>120, p_elev_unit_id=>'m', p_latitude=>76.5, + p_longitude=>-121.7, p_time_zone_id=>'UTC', + p_vertical_datum=>'NGVD29', p_horizontal_datum=>'NAD83', + p_public_name=>'Test Location', p_active=>'T'); + commit; + dbms_output.put_line(level_id); + + cwms_level.STORE_LOCATION_LEVEL4(p_location_level_id=>level_id, p_level_value=>null, + p_level_units=>units, p_effective_date=>effective_date, + p_interval_origin=>origin, p_interval_minutes=>minutes, + p_seasonal_values=>seasonal_data, p_office_id=>office_id, + p_fail_if_exists=>'F', p_timezone_id=>'UTC'); + commit; + ts_values := cwms_level.RETRIEVE_LOC_LVL_VALUES3(p_specified_times=>specified_times, + p_location_level_id=>level_id, + p_level_units=>units, + p_office_id=>office_id); + + date_map := map(); + + for i in 1..ts_values.count loop + current_date := ts_values(i).date_time; + + if (date_map.exists(current_date)) then + raise_application_error(-20001, 'Duplicate date found: ' || current_date); + end if; + + date_map(current_date) := true; + end loop; + + dbms_output.put_line('No duplicate dates found in specified_times array'); + END retrieve_level; + PROCEDURE setup + IS + location varchar(25) := 'test_level_as_ts'; + office_id varchar2(3) := '&&office_id'; + BEGIN + cwms_loc.CREATE_LOCATION(p_location_id=>location, p_db_office_id=>office_id, + p_elevation=>120, p_elev_unit_id=>'m', p_latitude=>76.5, + p_longitude=>-121.7, p_time_zone_id=>'UTC', + p_vertical_datum=>'NGVD29', p_horizontal_datum=>'NAD83', + p_public_name=>'Test Location', p_active=>'T'); + END; + PROCEDURE teardown + IS + location varchar(25) := 'test_level_as_ts'; + office_id varchar2(3) := '&&office_id'; + BEGIN + cwms_loc.DELETE_LOCATION_CASCADE(p_location_id=>location, p_db_office_id=>office_id); + END teardown; +END test_level_as_ts; +/ +SHOW ERRORS +/ \ No newline at end of file diff --git a/schema/src/test/tests.sql b/schema/src/test/tests.sql index f18ad076..60f411f0 100644 --- a/schema/src/test/tests.sql +++ b/schema/src/test/tests.sql @@ -58,6 +58,7 @@ show errors; @test_aq_user.sql; @test_webuser_abilities.sql; @test_cwms_ts_profile.sql; +@test_level_as_ts.sql @test_cwms_outlet.sql; @test_cwms_text.sql; @views/test_av_ts_grp_assgn.sql;