如何根据列名创建自动递增 table?
How to create auto incrementing table based on a column name?
标题可能有点令人困惑,但我会尝试在这里更好地解释。
我要实现的是:
创建一个包含 3 列的 table(目前一切顺利):
CREATE TABLE StatisticCounter
(
statisticID NUMBER GENERATED ALWAYS as IDENTITY (START with 1000 INCREMENT by 1),
statistikname varchar(255),
counter integer
);
创建一种调用方式(函数、过程、触发器或其他东西。我现在将其称为函数),它将根据 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;
经过大量的函数和过程,我自己找到了答案。
- 创建table;
- 创建函数;
- 调用文件中的函数。
这里重要的是,执行 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;
标题可能有点令人困惑,但我会尝试在这里更好地解释。
我要实现的是:
创建一个包含 3 列的 table(目前一切顺利):
CREATE TABLE StatisticCounter ( statisticID NUMBER GENERATED ALWAYS as IDENTITY (START with 1000 INCREMENT by 1), statistikname varchar(255), counter integer );
创建一种调用方式(函数、过程、触发器或其他东西。我现在将其称为函数),它将根据
statistikname
或将counter
增加 1statisticid
.
这里的限制是:所述统计是一个 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;
经过大量的函数和过程,我自己找到了答案。
- 创建table;
- 创建函数;
- 调用文件中的函数。
这里重要的是,执行 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;