最近,在处理db2 - > oracle迁移项目时,我们遇到了这种情况.开发人员无意中使用decimal(s,p)列创建新的表结构.我不记得Oracle支持这个,但后来一些挖掘表明它是一个ANSI数据类型,因此由oracle支持.
但问题仍然存在 -
我有以下SQL:
select <misc things>
from pluspbillline
left outer join workorder
on workorder.siteid=pluspbillline.siteid
and workorder.wonum = pluspbillline.refwo
and workorder.orgid = pluspbillline.orgid
left outer join ticket
on ticket.ticketid = pluspbillline.ticketid
and ticket.class=pluspbillline.ticketclass
left outer join pluspsalesorder
on pluspsalesorder.salesordernum=pluspbillline.salesordernum
and pluspsalesorder.siteid=pluspbillline.siteid
Run Code Online (Sandbox Code Playgroud)
在Oracle SQL Developer 4.0.0.13(连接到DB2数据库)中,我在下面的斜体下面得到一条波浪线:"来自pluspbillline "和"left outer join workorder ".
警告说"pluspbillline与连接图的其余部分断开连接".这是什么意思?
是否有与DB2的isnull函数等效的性能?
想象一下,我们的一些产品是内部的,所以他们没有名字:
Select product.id, isnull(product.name, "Internal)
From product
Run Code Online (Sandbox Code Playgroud)
可能会回归:
1 Socks
2 Shoes
3 Internal
4 Pants
Run Code Online (Sandbox Code Playgroud) 我有一些代码,我只想允许一个线程访问.我知道如何使用synchronized块或方法来实现这一点,但这将在集群环境中工作吗?
目标环境是WebSphere 6.0,在集群中有2个节点.
我有一种感觉synchronized不行,因为每个节点上的每个应用程序实例都有自己的JVM,对吧?
我在这里尝试做的是在系统启动时对数据库记录执行一些更新.它将查找比代码版本更旧的任何数据库记录,并执行特定任务以更新它们.我只希望一个节点执行这些升级,因为我想确保每个工作项只升级一次,并且这些升级的性能不是一个大问题,因为它只发生在应用程序启动时,它只是真正做任何事情自上次启动以来代码更改的时间.
数据库是DB2v9,我通过JNDI直接访问它(没有ORM层).
有人建议全球锁定可能是这里的方式,但我不知道如何做到这一点.
有没有人在这个舞台上有任何指针?
谢谢!
有没有人使用过这三个数据库?你对他们有什么经历?PostgreSQL对于一个项目看起来很诱人,但我很想知道它的更多信息(我们是一个.NET商店).我也听说过很多人对DB2感到满意.
我正在尝试将DB2源设置为Batch元数据的持久性.我得到这个堆栈跟踪:
Caused by: org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL [SELECT JOB_EXECUTION_ID, START_TIME, END_TIME, STATUS, EXIT_CODE, EXIT_MESSAGE, CREATE_TIME, LAST_UPDATED, VERSION, JOB_CONFIGURATION_LOCATION from rhall.BATCH_JOB_EXECUTION where JOB_INSTANCE_ID = ? order by JOB_EXECUTION_ID desc]; SQL state [null]; error code [-4470]; [jcc][t4][10120][10898][3.57.82] Invalid operation: result set is closed. ERRORCODE=-4470, SQLSTATE=null; nested exception is com.ibm.db2.jcc.am.SqlException: [jcc][t4][10120][10898][3.57.82] Invalid operation: result set is closed. ERRORCODE=-4470, SQLSTATE=null
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:84)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:645)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:680)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:712)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:722)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:777)
at org.springframework.batch.core.repository.dao.JdbcJobExecutionDao.findJobExecutions(JdbcJobExecutionDao.java:131)
at org.springframework.batch.core.repository.support.SimpleJobRepository.getStepExecutionCount(SimpleJobRepository.java:253)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native …Run Code Online (Sandbox Code Playgroud) 我想通过引用.dll而不是在服务器上安装任何软件来使用.Net和C#连接到DB2数据库,特别是iSeries版本.目前我们使用IBM.Data.DB2.iSeries.dll,它是作为iSeries访问Windows的一部分安装的.我不想安装所有这些.但显然我没有选项,因为其他提供程序IBM.Data.DB2.dll也要求您安装软件,然后才能根据stackoverflow帖子进行操作:IBM.Data.DB2
无论如何,只需在代码中引用.dll而不是在服务器上安装其他软件,就可以将.Net c#代码连接到DB2?
我知道你可以用Java和JT Open工具箱(http://jt400.sourceforge.net/)来做到这一点.你为什么不能用.Net做这个?
这是我们当前如何使用IBM.Data.DB2.iSeries.dll的基本示例.
String sql = "SELECT 1 FROM SCHEMAX.TABLEX";
System.Data.IDbConnection connection = null;
IDataReader reader = null;
try
{
connection = new iDB2Connection(ConfigurationManager.ConnectionStrings.ConnectionString);
connection.Open();
IDbCommand command = connection.CreateCommand();
command.CommandType = CommandType.Text;
command.CommandText = sql;
reader = command.ExecuteReader();
}
finally
{
try { reader.Close(); } catch (Exception ex) { }
try { connection.Close(); }catch (Exception ex) { }
}
Run Code Online (Sandbox Code Playgroud)
谢谢您的时间,谢谢
我正在尝试开发一个模型对象来保存一个Sql Server行,我完全理解除了T-Sql/SqlServer时间戳之外如何做到这一点.该表定义为:
CREATE TABLE activity (
activity_id int
, ip_address varchar(39)
, user_id varchar(255)
, message_text
, dt timestamp
)
Run Code Online (Sandbox Code Playgroud)
当我将表行解析为我的对象时,对于int或字符串,我希望做类似的事情:
ActivityID = (int)dataReader["activity_id"];
IPAddress = (string)dataReader["ip_address"];
Run Code Online (Sandbox Code Playgroud)
但是我该如何处理时间戳列?我可以在任何地方找到没有"timestamp"数据类型.我知道Sql Server将时间戳存储为8字节的二进制文件,但这通常与.NET中的相同?
编辑添加:一些额外的信息......这是从我们的大型机上的DB2表通过Sql Server视图返回的行."Rowversion"不是一个选项,DB2正在将列作为时间戳处理.如果timestamp和rowversion相同,也许我可以将它视为一个,但否则我会遇到时间戳.
再次编辑补充说:这个项目将让我疯狂.它至少会是一次短途旅行.无论如何,是的@JoelC这是一个Sql Server视图,进入大型机上的DB2数据库.我终于能够找到我们的一位DBA,他们轻蔑地解释说"当然"DB2 TIMESTAMP遇到了一个Sql Server视图作为日期时间.根据他的语调,我猜只有新手不知道这一点.这就是为什么他在实际视图中将其命名为"datetime",Duh!(我在我的示例中给它一个不同的名称,以便不触发对命名约定的评论 - 实际的数据模型图表示它是TIMESTAMP并将其命名为时间戳).所以,在这种情况下,显然必须将其转换为DateTime.我想我可能会开始考虑成为一名DBA,这样我也可以让程序员疯狂.对不起,如果我误导了这个问题的任何响应者 - 这是无意的,因为我实际上期待时间戳是一个时间戳.傻我.特别感谢Microsoft将字节数组数据类型命名为"时间戳",因为它与日期和时间无关.我没有最简单的想法,哪个回应标记为答案.叹.
db2 ×10
sql ×4
sql-server ×2
.net ×1
ansi ×1
c# ×1
database ×1
ibm-midrange ×1
java ×1
locking ×1
null ×1
oracle ×1
postgresql ×1
spring-batch ×1
t-sql ×1