- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在开发一个审计跟踪模块,该模块要求我从原始表创建一个巨大的影子表列表。我正在考虑编写一个可以从另一个表生成影子表的存储过程。这个表可以是任何表,可以是包含任意数据类型的3个字段的table_A,也可以是包含任意数据类型的10个字段的table_B,并且可以基于传递给存储过程的参数。
我知道我可以像这样从 syscolumns 和 systables 中检索特定 table_A 可用的字段列表:
select * from syscolumns where tabid = (select tabid from systables where tabname='table_A')
这个语句会返回一个字段列表,比方说field_A,然后我会重命名这个field_A来创建2个新字段pre_field_A和post_field_A,然后使用这2个新字段创建shadow_table_A的影子表.将此概念应用于其余字段。无需担心字段的数据类型,因为此信息已存在于 syscolumns 中,我可以将其复制到影子表中。
我目前对如何存储从上述语句返回的值列表感到困惑,因为通常任何表都包含多个字段。可以使用数组来完成吗?或为审计跟踪目的创建影子表的任何替代解决方案?
最佳答案
您的查询将有效,但使用连接可能更符合习惯:
SELECT *
FROM "informix".systables AS t
JOIN "informix".syscolumns AS c ON t.tabid = c.tabid
WHERE t.tabname = 'table_a';
另外,请注意,如果您在环境中设置了 DELIMIDENT 时创建了表,并且您创建的表的名称用双引号引起来,则系统目录将仅包含大小写混合的 table_A
.通常,表名在系统目录中将全部为小写字母;列名也类似。
但是,这与您的问题无关。处理所有荣耀的用户定义类型是痛苦的。但是,如果您处理的是普通数据库,您当然可以那样工作,尽管使用 DB-Schema (dbschema
) 生成表的模式,然后捕获它可能更容易.您实际上可以使用 SYSTEM 语句通过存储过程来完成此操作,但我可能会从存储过程外部进行此操作。这确实取决于您还需要做什么。每个字段的前像和后像可能成本适中。
如果您有 IBM Informix Dynamic Server 11.70,则可以动态创建 CREATE {audit} TABLE 语句,然后执行该语句。因此,您将在存储过程中使用 FOREACH 循环构建查询以依次添加每一列,然后执行创建审计表的语句。您还必须解码类型。您也可以/应该为此使用一个程序。我假设 tabname
是传递给存储过程的变量,c_colno
、c_colname
和 c_typename
是局部变量(如 cts
,'create table statement' 的缩写,和 pad
):
LET cts = 'CREATE TABLE ' || tabname || '(';
LET pad = '';
FOREACH SELECT c.colno, c.colname, type_name(c.coltype, c.collength)
INTO c_colno, c_colname, c_typename
FROM "informix".systables AS t
JOIN "informix".syscolumns AS c
ON t.tabid = c.tabid
WHERE t.tabname = tabname
ORDER BY c.colno
LET cts = cts || pad || 'pre_' || c_colname || ' ' || c_coltype;
LET cts = cts || ',' || 'post_' || c_colname || ' ' || c_coltype;
LET pad = ',';
END FOREACH;
LET cts = cts || ');';
您可能想要处理 NOT NULL 和主键约束以及各种其他事情,但这为您提供了继续进行的基础知识。
关于database - 如何在 Informix 中创建影子表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10116697/
我正在尝试创建一个邻接列表,为此我需要创建一个链接列表的数组列表。当我这样做时,这个 cityList 的大小不会更改为构造函数中传递的大小。我觉得这可能是由于阴影造成的,但我不确定阴影是如何工作的,
我正在包装应用程序的影子 jar 。该应用程序使用kotlin和一些外部依赖项。所有依赖项都在我的jar中,但在运行时出现以下异常: java.lang.NoSuchMethodError: java
我有两个自定义元素 #shadow-root (open) 我正在尝试设计 像这样: #desktop::shadow desktop-window { backgro
通过此实例化的 Web 组件样式不正确: connectedCallback() { const shadowRoot = this.attachShadow({ mode: 'open' });
规范在这里 - https://drafts.csswg.org/css-scoping/#slots-in-shadow-tree有注释如下。 Note: A non-obvious result
我在我的应用程序中使用网络组件。在 Web 组件中,我需要插入一个 React 组件。 Web Component 有 Shadow DOM。当我尝试使用以下方法渲染 react 组件时,出现错误。
CSS Scoping说 The descendants of a shadow host must not generate boxes in the formatting tree. Instea
在尝试比较两个 dll 的 API 更改时,一位同事注意到某些类有两个 GetType() 方法。 经过更深入的检查,结果是 System.Exception 隐藏了 GetType(): // th
HTML代码: #shadow-root (user-agent) "this is text in textarea" 我正在尝试使用此 JQuery 使用 id="in
我正在使用 Robolectric 并尝试创建 GoogleApiClient 的 Shadow 对象,但没有成功。 Shadow 类中的方法永远不会被调用。 GoogleApiClient 是接口(
我正在尝试寻找一种不使用 iframe 来封装 Javascript 的方法。理想情况下,我想要一种在父页面上加载外部 HTML 组件(小部件)的方法,而无需使用 iframe 附带的两步加载过程(首
我是Gradle和Shadow jar(Gradle version of Maven's Shade plugin)的新手。我正在构建一个胖jar,我想在其中合并服务文件(这就是为什么我首先使用影子
如您所见,我想动态添加内容,但 shadow DOM 不显示内容 我怎样才能使内容可见?我想让内容可见。 let shadow = document.querySelector('#nameTag')
我正在编写一个 chrome 扩展程序,它可以在页面加载或更改时修改元素属性。 我使用 Mutation Observer 执行此操作。然而,当加载/更改 shadow-dom(即嵌入的 twitte
我试图了解单选按钮如何在影子 dom 中工作。我有一个脚本标签,我将一个影子 DOM 附加到一个元素,然后附加一些单选按钮。我的问题是单选按钮未呈现。 Title Radi
我读了很多关于 shadow DOM 的文章,但对此不是很清楚。能谁能告诉我什么是 shadow DOM 以及如何为下面的代码添加一个? 最佳答案 Shadow DOM
关于 的 CSS 优先级规则是怎么说的?影子 DOM 中的标签? 我有一个元素 , 中包含的 CSS 文件与: component { display: inline-block; }
如果我的 Web 组件是 的直接子组件,我必须对它应用特殊的 CSS 样式。元素。到目前为止,这是我尝试过的: /* applies even if the component isn't a di
我尝试使用 https://github.com/webcomponents/webcomponentsjs 中的 polyfill 制作我自己的 Web 组件 这是我的代码: im-list.htm
我是一名优秀的程序员,十分优秀!