天道酬勤,学无止境

db2

Find related columns among hundreds of tables for future relational identification

问题 我正在使用 SQL Server 2016 从存储在 DB2 数据库中的 ERP 系统中提取信息。 这有数千个表,其中没有键。 从系统中提取表时,我希望能够识别表中匹配的列名,以便在构建维度时开始创建关系和键。 有没有办法创建一个查询来在我的数据库中搜索列名并列出使用该列名的每个表? 我一直在使用OPENQUERY和INFORMATION_SCHEMA.TABLES来确定我想要拉过来的表,但现在我想开始确定这些表之间的关系。 任何帮助将非常感激! 回答1 您可以查看旧的黄金系统表。 几个例子 查找具有名为 ID 的列的所有表 select so.name, sc.name from sys.sysobjects so join sys.syscolumns sc on sc.id = so.id where so.xtype = N'U' and sc.name like 'ID%' 从表中查找 FK select so2.name from sys.sysobjects so join sys.sysforeignkeys fk on so.id = fk.rkeyid join sys.sysobjects so2 on fk.fkeyid = so2.id where so.name = 'MyTable' 查看 MSDN 文档以获取更多参考,如果您想要任何特定组合

2022-05-16 04:35:03    分类:技术分享    sql   sql-server   db2   relational-database   dimensional-modeling

INSERT into DB2 with a user defined type column

问题 您好我正在尝试使用用户定义的类型探索 DB2 我已经创建了一个类型和一个表,但我现在无法将数据插入到表中。 我在 DB 中的用户定义类型如下: CREATE TYPE pizza AS (type varchar(50), size INTEGER, topping varchar(50)) MODE DB2SQL@ 然后我创建了一个表,如下所示: CREATE TABLE orders (id INT NOT NULL PRIMARY KEY, customer VARCHAR(50), pizza_row pizza)@ 然后当我尝试插入时出现错误,这是我的插入语句: INSERT into orders (id,customer,pizza_row) VALUES (1,'Larry', pizza('margarita',10,'kebab'))@ 收到错误: 未找到具有兼容参数的类型为“FUNCTION”的名为“PIZZA”的授权例程。SQLCODE=-440 插入我的模式的正确语法是什么? 回答1 DB2 在创建结构化类型时自动生成的默认构造函数没有参数: pizza() 。 如果你想用一些值来实例化你的类型,你需要创建自己的构造函数来调用默认构造函数,然后为类型的字段分配适当的值,如下所示: create or replace function pizza (

2022-05-14 06:01:20    分类:技术分享    sql   db2   user-defined-types

db2 query in shell script doesn't run with empty results in shell

问题 我在 shell 中有以下脚本。 测试.sh #! /bin/bash connect_stat=$(db2 -x "connect to $DB_NAME USER $DB_USER using $DB_PASSWORD" ) db2 "SET SCHEMA=SCHEMA1" while read line; do a=$(db2 -x "SELECT C.id FROM table C WHERE C.col1 IN ('$line)') with ur") echo $a done<inputs.txt 运行“sh test.sh”时得到空结果 当我通过 putty 在 db2 中运行相同的上述查询时,我得到了结果。 我有以下 dbcon 文件。 会触发putty中的dbcon文件,结果可用 /admin/.profile db2 connect to DB_NAME USER DB_USER using DB_PASSWORD db2 set SCHEMA=SCHEMA1 db2 db2 => SELECT C.id FROM table C WHERE C.col1 IN ('xyz-asd-asd') with ur ID ---------------------------------------------------------------- 123 1

2022-05-11 09:42:04    分类:技术分享    bash   shell   db2

DB2, when trying to calculate difference between provided and stored timestamp I get an error 'The invocation of function is ambiquious'

问题 这是我准备语句的 sql 字符串: SELECT (DAYS(?) - DAYS(FROM)) * 86400 + (MIDNIGHT_SECONDS(?) - MIDNIGHT_SECONDS(FROM)) AS FROM_DIFF, (DAYS(?) - DAYS(TO)) * 86400 + (MIDNIGHT_SECONDS(?) - MIDNIGHT_SECONDS(TO)) AS TO_DIFF FROM CALENDAR.EVENTS WHERE ID = ? 使用以下代码填充值: ps.setTimestamp(1, new Timestamp(...)); ps.setTimestamp(2, new Timestamp(...)); ps.setTimestamp(3, new Timestamp(...)); ps.setTimestamp(4, new Timestamp(...)); ps.setInt(5, ...); 并得到一个例外: com.ibm.db2.jcc.am.SqlSyntaxErrorException:DB2 SQL 错误:SQLCODE=-245,SQLSTATE=428F5,SQLERRMC=DAYS;1,DRIVER=4.16.53 当我直接从 SQL 浏览器运行它时,它运行完美: SELECT (DAYS('2015

2022-05-11 04:29:23    分类:技术分享    sql   jdbc   db2   db2-luw

Pass Array as parameter in DB2 Stored Procedure

问题 我正在尝试创建一个将数组作为参数的存储过程,并在 WHILE 循环中遍历该数组并将字符添加到表中。 例如,如果我有一个 ['a','b','c'] 数组,我想将其传递到我的存储过程中,并将字符 'a' 、 'b' 和 'c' 放入 a桌子。 我的 SP 创建成功,但是当我尝试调用我的程序时遇到问题。 谁能指出我如何传递数组? 我的程序如下...... DROP PROCEDURE DB.LWRH_DYNAMIC_SP@ create type stringArray as VARCHAR(100) array[100]@ CREATE PROCEDURE DB.LWRH_SP ( IN list stringArray ) LANGUAGE SQL BEGIN DECLARE i, MAX INTEGER; DECLARE c CHAR(1); SET i = 0; SET MAX = CARDINALITY(list); WHILE i <= MAX DO SET c = list[i]; INSERT INTO schema.test ("SERVICE TYPE")values (c); END WHILE; END@ CALL DB.LWRH_SP('')@ 回答1 使用 DB2 数组构造函数调用带有数组类型输入参数的存储过程。 使用数组构造函数创建整数数组的示例:

2022-05-09 17:30:35    分类:技术分享    sql   stored-procedures   db2

SQL differences for DB2 versions

问题 我们正在开发使用ODBC drivers为 Oracle 和SQL Server 生成和执行SQL查询的软件。 我们正在研究扩展到DB2的可能性,但我读到有几个版本可用。 DB2 for LUW 、 iSeries和 z/OS。 这些版本的SQL/PLSQL功能的SQL有什么不同吗? 作为 ISV,是否可以获得DB2 for iSeries或z/OS的开发环境 回答1 正如许多其他答案已经说过的那样,DB2 家族的成员之间存在差异。 所有 DB2 都符合 SQL-99,并且每个成员都具有以下 SQL 标准(2003、2006、2008、2011)的特定功能。 此外,还为每个成员添加了一些额外的功能,例如 LUW 中的自治事务或模块。 IBM 中有一个名为 SQL Language Council (SLC) 的小组,其目的是讨论 DB2 家族的兼容性。 SQL 架构师(Serge Rielau 和 Rick Swagerman)撰写的以下文章讨论了这一点: 更多家庭事务:为可移植 DB2 应用程序开发人员选择的常用 SQL 特性家庭很重要:跨平台开发的 SQL 参考 该小组创建了一个名为 SQL Reference for Cross-Platform Development 的文档,描述了该系列成员之间的兼容性。 当前版本是 4.0,它对当前 DB2 版本的特性进行了分组。

2022-05-09 16:11:33    分类:技术分享    sql   db2   ibm-midrange   zos

DB2 storing results from final table clause

问题 FINAL TABLE 子句非常适合从 DB2 中的 DML 获取值,例如: SELECT id FROM FINAL TABLE ( INSERT INTO mySchema.myTable (val) VALUES ('data') ) 但是,似乎没有办法将此查询的结果存储到另一个表中,从而将内容保存在某处。 例如,以下两个都失败并出现错误“数据更改表引用在指定的地方不允许”。 (我正在为 i v7.1 运行 DB2): CREATE TABLE mySchema.otherTable AS ( SELECT id FROM FINAL TABLE ( INSERT INTO mySchema.myTable (val) VALUES ('data') ) ) WITH DATA 在单独的 CREATE TABLE 语句中创建 mySchema.otherTable 后,这也失败了: INSERT INTO mySchema.otherTable (ID) SELECT id FROM FINAL TABLE ( INSERT INTO mySchema.myTable (val) VALUES ('data') ) 回答1 with i1 (id) as ( SELECT id FROM FINAL TABLE ( INSERT INTO mySchema

2022-05-08 13:07:10    分类:技术分享    sql   db2   db2-400

How can I convert the standard AS400 CYMD date format to MDY in PHP?

问题 我在 PHP 中做了很多查询。 我正在显示来自这些查询的信息,但我想将日期格式更改为程序员以外的人可以轻松阅读的格式。 目前我已经能够通过使用这个: $compdt = str_split($fin47['COMPDT']); $compdt = "$compdt[3]$compdt[4]/$compdt[5]$compdt[6]/$compdt[1]$compdt[2]" 上面的效果很好。 例如,从数据库中,我返回这个日期: 1090225 在我完成数组和字符串排列之后,我得到了这个: 02/25/09 但是,当我从数据库中返回 2000 年前的日期时,如下所示: 960614 在我的字符串安排之后我得到了这个: 61/4/60 这显然是不正确的,因为世纪数不存在,而且年份也为零。 我刚刚遇到了一些 2000 年前的日期,并且所有格式都关闭了。 有没有简单的方法来翻转日期,或者我是否必须对 2000 年之前的日期进行第二次数组排列? 回答1 CYMD日期具有世纪、年、月、日格式,cyymmdd,其中 c 为 0 表示 1928 到 1999 年,为 1 表示 2000 到 2071 年。 刚刚为你做的:http://ideone.com/6MQmWk <?php function cymdToTime($d) { $matches = null; preg_match('/

2022-05-07 03:10:18    分类:技术分享    php   sql   date   db2   ibm-midrange

DB2- Getting A default table space could not be found with a page size of at least "8192" that authorization ID "***" is authorized to use

问题 我是 db2 的新手,整个数据库请帮助我。 我正在现有数据库中创建一个表,但是在执行 create 语句后,我得到以下错误消息, SQL0286N 找不到授权标识“DB2ADMIN”被授权使用的页大小至少为“8192”的缺省表空间。 SQLSTATE=42727 SQL0286N 找不到授权标识“DB2ADMIN”被授权使用的页大小至少为“8192”的缺省表空间。 解释: CREATE TABLE、CREATE GLOBAL TEMPORARY TABLE 或 DECLARE GLOBAL TEMPORARY TABLE 语句未指定表空间,以及具有足够页大小(至少“ "),无法找到授权 ID "" 具有 USE 权限。 表的足够页面大小取决于行的字节数或列数。 因此我创建了一个表空间 CREATE LARGE TABLESPACE LARGEDATA MAXSIZE 512 M 并用这个空间来创建我的桌子,比如 在 LARGEDATA 中创建表 table_name( * ); 我认为 512M 应该足以容纳大约 15 列的表,但我得到以下例外: SQL0670N 表的行长度超过了“4005”字节的限制。 (表空间“LARGEDATA 请帮忙... 提前感谢您的帮助和时间。 :) 回答1 您正在创建的表的行超出了现有表空间的页面大小。 可能,您有一个默认页面大小为 4KB

2022-05-06 03:47:03    分类:技术分享    db2

Database : Primary key columns in beginning of table

问题 它会影响将所有主键列放在表的开头吗? 我知道部分索引读取很可能涉及将整行带入缓冲池以进行谓词匹配的表扫描。 我很想知道在表顶部具有主键的任何性能提升会提供。 回答1 在 Oracle 中,表的列顺序通常对性能几乎没有影响。 原因是行的所有列通常包含在单个块中,并且与查找/读取块相比,查找块中行的第一列和最后一列之间的时间差异是无限小的。 此外,当您到达数据库块读取一行时,主键可能不是最重要的列。 以下是列顺序可能会产生影响的一些例外情况: 当您的表中有 > 255 列时,行将分成两个块(或更多块)。 访问前 255 列可能比访问其余列便宜。 如果一行的最后一列是NULL ,则它们占用 0 字节的空间。 因此,如果可能的话,最好将包含许多NULL值的列放在行尾,以减少空间使用,从而减少 IO。 一般来说,影响很小,因为其他 NULL 列每个占用 1 个字节,因此节省的空间很小。 启用压缩时,压缩效率可能取决于列顺序。 一个好的经验法则是应该对具有很少不同值的列进行分组,以提高它们被压缩算法合并的机会。 当您将索引组织表 (IOT) 与溢出子句一起使用时,您应该考虑列的顺序。 使用此子句,确定的分隔列之后的所有列都将被存储在行外,访问它们将产生额外的成本。 主键始终物理存储在 IOT 中行的开头。 回答2 回答3 在 DB2 中,(我认为关于其他数据库管理器系统的答案应该检查答案

2022-05-05 03:24:04    分类:技术分享    sql-server   oracle   db2