刚刚从mySQL移动平台到firebird我发现很难找到一种可接受的方法来捕获从Java .jar应用程序传递到数据库服务器(Firebird)的SQL命令.我需要分析命令以及在执行时间等方面传递的查询的"成本".
使用MySQL可以使用maatkit工具包,但不幸的是,这似乎不适用于Firebird.
有没有人对Firebird的maatkit有适当的可比方法?或者使用strace或类似?
我可能是愚蠢的.还不确定.
尝试做一些应该简单的事情:
$database = '10.10.10.81:?????';
$username = 'admin';
$password = 'pw';
$conn = ibase_connect($database, $username, $password);
if (!$conn)
{
echo "Error while connecting: ".ibase_errmsg();
exit();
}
echo 'workan';
Run Code Online (Sandbox Code Playgroud)
我们遇到了错误:远程接口拒绝了连接.从另一个问题我在这里读到,这来自各种各样的事情:可能是用户/密码问题,可能是主机($ database)问题,还有我忘记的其他问题.
我相信我的主机字符串是非常错误的,无法弄清楚我应该怎么做.也许我的google-fu不符合标准.
试图在10.10.10.81上找到E:\ fishbowl\database\data\base.fdb,一台单独的本地计算机
尝试了一堆组合,但似乎无法使任何工作.
编辑:只是一个抬头,这是一个火鸟数据库.不确定这是否会改变一切
我有以下选择,其目标是选择自X天以来没有销售的所有客户,并且还提供上次销售的日期和销售数量:
select s.customerId, s.saleId, max (s.date) from sales s
group by s.customerId, s.saleId
having max(s.date) <= '05-16-2013'
Run Code Online (Sandbox Code Playgroud)
但这样它给我带来了以下内容:
19 | 300 | 26/09/2005
19 | 356 | 29/09/2005
27 | 842 | 10/05/2012
Run Code Online (Sandbox Code Playgroud)
换句话说,前两行是来自同一个客户(id 19),我希望他每个客户只能获得一条记录,这将是最大日期的记录,在这种情况下,第二条记录来自此名单.通过这个逻辑,我应该从"group by"子句中取消s.saleId,但是如果我这样做,当然,我得到错误:选择列表中的表达式无效(不包含在聚合函数或GROUP BY中)条款).
我正在使用firebird 1.5
我怎样才能做到这一点?
我有两个表AUTHOR并BOOK连接AUTHORID.
我需要创建一个触发器,在删除作者的情况下,它首先删除该作者的书籍,然后删除作者.如果有人只是试图更新的AUTHORID领域中AUTHOR它更新AUTHORID的BOOK自动.
这甚至可行吗?:)
set term # ;
create trigger del for author
before delete or update as
declare variable aut int;
declare variable bok int;
begin
if(deleting) then
begin
delete from book where authorid=:aut;
delete from author where authorid=:aut;
end
if (updating) then
begin
update book set authorid=new.authorid;
end end#
set term ; #
Run Code Online (Sandbox Code Playgroud) 我想知道R编程是否支持Firebird数据库?我检查了可能的链接,发现它支持Oracle,MySQL,PostgreSQL等,但没有找到Firebird.
我试图找到一种方法快速将大量数据加载到数据库中,一个建议使用Firebird外部表,我想了解更多有关此方法,我尝试在线搜索但我没有得到有关的信息这个,我想知道它们是如何工作的?表格必须完全相同吗?如果从多个数据库加载数据怎么办?
序列:
table1 ===== id - Description ---------------- |1 |Proj-x |2 |Settlers |3 |Bank |4 |Newiest table2 ===== id table1Id value alternate-value --------------------------------- |1| 1 |12 |null |1| 4 |6 | null |1| null |22 |Desktop |2| 2 |7 |null |2| 3 |11 |null |2| null |2 |Camby Jere |3| 1 |8 |null |3| 4 |6 |null |3| null |7 |Camby Jere
必须返回select指令
|table1.id|Proj-x|Settlers|Bank |Newiest|Desktop|Camby Jere ---------------------------------------------------------- |1 |12 |null |null |null |null |null |1 |null |null |6 |null |null |null …
我正在尝试向 firebird 表添加一列。该列应该有一个默认值 1,但最初对于已经存在的行,该值应该设置为 0。这应该发生在一个事务中。
我试过
ALTER TABLE MYTABLE ADD MYCOLUMN SMALLINT DEFAULT 1 NOT NULL;
UPDATE MYTABLE SET MYCOLUMN = 0;
Run Code Online (Sandbox Code Playgroud)
但这在一笔交易中是不允许的,因为更新不会看到新列。我也试过:
ALTER TABLE MYTABLE ADD MYCOLUMN SMALLINT DEFAULT 0 NOT NULL;
ALTER TABLE MYTABLE ALTER COLUMN MYCOLUMN SET DEFAULT 1 NOT NULL;
Run Code Online (Sandbox Code Playgroud)
希望该列之后为 0 但它将为 1。
在一笔交易中获得我想要的东西的更多选择?
在查看专有软件(可能使用 Firebird Embedded)的 .fdb 数据库时,如何确定需要设置哪个版本的 Firebird?
我目前可以想象的唯一方法是使用十六进制查看器查看“ODS-version”,它是页面标题的一部分,它很可能也用作文件标题的格式,然后以某种方式通过挖掘存储库历史找出哪个 Firebird 版本支持哪个 ODS 版本。至少现在,ODS 版本的编码如下所述。
相关文档: https : //firebirdsql.org/file/documentation/reference_manuals/reference_material/Firebird-Internals.pdf
相关代码:
https://github.com/FirebirdSQL/firebird/blob/3dd6a2f5366e0ae3d0e6793ef3da02f0fd05823a/src/jrd/ods.h
和
inline USHORT DECODE_ODS_MAJOR(USHORT ods_version)
{
return ((ods_version & 0x7FF0) >> 4);
}
inline USHORT DECODE_ODS_MINOR(USHORT ods_version)
{
return (ods_version & 0x000F);
}
Run Code Online (Sandbox Code Playgroud)
真的没有更简单的方法来确定所需的 firebird 版本,例如使用一些 cli-tool 吗?