1. 建表&投入测试数据
CREATE TABLE CONTRACT_YEAR_SETTING (BU_CODE VARCHAR2(2 CHAR), BU_NAME VARCHAR2(500 CHAR), YEAR NUMBER(4), STATUS VARCHAR2(30), START_DATE DATE, END_DATE DATE
);
/
INSERT INTO CONTRACT_YEAR_SETTING VALUES('02', '医学部_01',2024,'O',TO_DATE('2024-01-01 12:34:56','YYYY-MM-DD HH24:MI:SS'),TO_DATE('2024-12-01 12:34:56','YYYY-MM-DD HH24:MI:SS'));
INSERT INTO CONTRACT_YEAR_SETTING VALUES('03', '医学部_02',2024,'O',TO_DATE('2024-01-01 12:34:56','YYYY-MM-DD HH24:MI:SS'),TO_DATE('2024-12-01 12:34:56','YYYY-MM-DD HH24:MI:SS'));
INSERT INTO CONTRACT_YEAR_SETTING VALUES('10', '医学部_10',2024,'O',TO_DATE('2024-01-01 12:34:56','YYYY-MM-DD HH24:MI:SS'),TO_DATE('2024-12-01 12:34:56','YYYY-MM-DD HH24:MI:SS'));
INSERT INTO CONTRACT_YEAR_SETTING VALUES('02', '医学部_01',2025,'O',TO_DATE('2025-01-01 12:34:56','YYYY-MM-DD HH24:MI:SS'),TO_DATE('2025-12-01 12:34:56','YYYY-MM-DD HH24:MI:SS'));
INSERT INTO CONTRACT_YEAR_SETTING VALUES('03', '医学部_02',2025,'O',TO_DATE('2025-01-01 12:34:56','YYYY-MM-DD HH24:MI:SS'),TO_DATE('2025-12-01 12:34:56','YYYY-MM-DD HH24:MI:SS'));
INSERT INTO CONTRACT_YEAR_SETTING VALUES('10', '医学部_10',2025,'O',TO_DATE('2025-01-01 12:34:56','YYYY-MM-DD HH24:MI:SS'),TO_DATE('2025-12-01 12:34:56','YYYY-MM-DD HH24:MI:SS'));
COMMIT;
2. 经典报表做成
2-1. 画面布局如下

2-2. 报表使用的SQL
select APEX_ITEM.CHECKBOX2(1,ROWID,'class="row-checkbox"') as RS,BU_CODE,BU_NAME,YEAR,DECODE(STATUS,'O','オーペン','C','クロース','') AS STATUS,START_DATE,END_DATEfrom CONTRACT_YEAR_SETTING cyswhere (:P3003_YEAR IS NULL OR cys.YEAR = :P3003_YEAR)order by cys.BU_CODE, cys.YEAR
2-3. RS列的Heading设定
<input type="checkbox" id="selectAll" onclick="toggleSelectAll(this)">
2-4. Function and Global Variable Declaration
function toggleSelectAll(checkbox) {$('.row-checkbox').prop('checked', checkbox.checked);
}
function initCheckboxSync() {$('#selectAll').click(function() {var isChecked = $(this).prop('checked');$('.row-checkbox').prop('checked', isChecked).trigger('change');});$('.row-checkbox').change(function() {updateHeaderState();updateSelectedItems();});updateHeaderState();
}
function updateHeaderState() {var total = $('.row-checkbox').length;var checked = $('.row-checkbox:checked').length;$('#selectAll').prop('checked', checked === total).prop('indeterminate', false);
}
2-5. Execute when Page Loads
initCheckboxSync();
2-6. Process
DECLARElt_selected_ids apex_application_global.vc_arr2;lv_status CONTRACT_YEAR_SETTING.STATUS%type;
BEGINlt_selected_ids := apex_application.g_f01;if lt_selected_ids.COUNT = 0 thenapex_error.add_error (p_message => 'No rows are selected or updated.',p_display_location => apex_error.c_inline_in_notification );return;end if;FOR i IN 1..lt_selected_ids.COUNT LOOPSELECT STATUSINTO lv_statusFROM CONTRACT_YEAR_SETTINGWHERE ROWID = lt_selected_ids(i);IF lv_status = 'C' THENUPDATE CONTRACT_YEAR_SETTINGSET STATUS = 'O'WHERE ROWID = lt_selected_ids(i);ELSEUPDATE CONTRACT_YEAR_SETTINGSET STATUS = 'C'WHERE ROWID = lt_selected_ids(i);END IF;END LOOP;COMMIT;
END;
3. 运行效果
