如何根据列名创建自动递增 table?

How to create auto incrementing table based on a column name?

标题可能有点令人困惑,但我会尝试在这里更好地解释。

我要实现的是:

  1. 创建一个包含 3 列的 table(目前一切顺利):

    CREATE TABLE StatisticCounter
    (
        statisticID NUMBER GENERATED ALWAYS as IDENTITY (START with 1000 INCREMENT by 1), 
        statistikname varchar(255),
        counter integer 
    );
    
  2. 创建一种调用方式(函数、过程、触发器或其他东西。我现在将其称为函数),它将根据 statistikname 或将 counter 增加 1 statisticid.

这里的限制是:所述统计是一个 SQL 脚本 运行 通过驾驶舱文件,语法与常规 sql 略有不同(输入:输出:select, WHERE 带变量)。我想在这个驾驶舱文件中放置一个函数或其他东西,每次脚本为 运行 时都会 运行。这将自动增加统计数据的使用次数。

我不知道我需要什么(函数、过程、触发器或其他任何东西),这就是为什么我写得有点含糊。

编辑:我尝试合并,但我总是得到执行的 WHEN NOT MATCHED 结果。没有CAST也是一样。

merge into StatisticCounter stc using 
CAST((select 1000 id from dual)AS INTEGER) val on (stc.statisticid=val.id) 
when matched then 
UPDATE StatisticCounter SET counter = counter + 1; 
when not matched then 
select * from dual;

经过大量的函数和过程,我自己找到了答案。

  1. 创建table;
  2. 创建函数;
  3. 调用文件中的函数。

这里重要的是,执行 SQL 的外部 _cockpit 文件会检查每行的所有 OUT 参数,结果是统计数据 returns。这使计数器变得疯狂 - 无法捕捉统计数据的结束或开始。所以我制作了第二个只有 1 个结果的 _cockpit 并将其附加到我要计算的统计数据中。

CREATE TABLE UDX_Table_StatisticCounter(statisticID INTEGER, StatistikName varchar2(256 char), counter integer);

CREATE OR REPLACE FUNCTION UDX_FUNC_StatisticCounter(datainput IN VARCHAR2) RETURN VARCHAR2 IS PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN UPDATE UDX_Table_StatisticCounter SET counter = counter +1 WHERE statisticID=datainput; COMMIT; RETURN 'done'; END UDX_FUNC_StatisticCounter;