Ваше объяснение не очень понятно, я пытаюсь уточнить, что я понял (растягивая свое воображение), следующим примером / дальнейшим описанием
Допустим, у вас есть две основные таблицы
create table tbl_1(
id int not null primary_key,
value_1 int
);
create table tbl_2(
id int not null primary_key,
value_2 int
);
Если вы передадите tbl_1, value_1 в качестве параметров вашей процедуры, ваш SQL вставки должен быть
INSERT INTO TEST_DATA_QTY_AND (TABLE_ID, FLD_ID, MEASURE) values ('tbl_1', 'value_1', (select sum(case when value_1 <> 0 then 1 else 0 end) from tbl_1))
Когда вы передаете tbl_2, value_2 в качестве параметров вашей процедуре, ваш SQL вставки должен быть
INSERT INTO TEST_DATA_QTY_AND (TABLE_ID, FLD_ID, MEASURE) values ('tbl_2', 'value_2', (select sum(case when value_2 <> 0 then 1 else 0 end) from tbl_2))
Если это понимание верно, то должно работать следующее
CREATE OR REPLACE PROCEDURE DATA_QTY_AND(pTable IN VARCHAR2, pField IN VARCHAR2)
IS
v_sql varchar2(2000);
BEGIN
v_sql := utl_lms.format_message(
'INSERT INTO TEST_DATA_QTY_AND (TABLE_ID, FLD_ID, MEASURE) VALUES('''%s''', '''%s''', '
||'(SELECT SUM(CASE WHEN %s <> 0 THEN 1 ELSE 0 END)/ COUNT(*) FROM %s))',
pTable, pField, pField, pTable);
EXECUTE IMMEDIATE(v_sql);
END;
Примечание Я оставил вам обработку транзакций и исключений в качестве упражнения.Также обратите внимание, что на момент написания этой статьи у меня не было доступа к базе данных Oracle, поэтому я не мог создавать / компилировать, чтобы отсеять любую ошибку / проблему.Вы должны попытаться решить проблемы (если таковые имеются).Если вы не можете оставить комментарий, я сделаю это, когда у меня будет доступ к экземпляру БД.
ОДНАКО, все это только тогда, когда мое решение вашей проблемы верно.