我正在从SQL Server迁移到Firebird.
在SQL Server中
CREATE PROCEDURE Departments_GetAll
AS
SELECT * FROM Departments
Run Code Online (Sandbox Code Playgroud)
我在Firebird中尝试
CREATE PROCEDURE DEPARTMENTS_DELETEALL
AS
BEGIN
SELECT * FROM "Departments";
END^
SET TERM ; ^
Run Code Online (Sandbox Code Playgroud)
但这不起作用.
它返回错误"SQL Code -104"
我有一个来自新客户端的fdb文件(firebird)(他不知道版本).我曾尝试使用一些GUI来访问数据库,但没有运气.所有这些都告诉它缺少gds32.dll,但我有这个.
我已将此dll复制到GUI文件夹,我已将dll复制到system32文件夹,并已复制到syswow64.我运行Windows 7 64位,firebird数据库是32位.我试图安装DLL但我无法注册它.
我已经在虚拟机中安装了WinXP以查看它是否运行,但没有.regsvr32告诉我它不是一个可执行文件...在Win 7中,这个DLL可能与Windows版本不兼容.
我试过IbExpert Personal,Ibmanager和Flamerobin,他们向我显示了同样的错误,没有找到或没有安装dll.
如何打开这个firebird db?
在MS SQL Server中,您可以声明任何基本类型或表类型的局部变量.此表是可以运行一个普通的表SELECT,INSERT,UPDATE和DELETE上,就像任何其他表,但它是一个局部变量,而不是数据库本身的一部分.
我试图在Firebird中做同样的事情,但它似乎不喜欢语法.
declare variable value int; --works fine
declare variable values table (value int); --Error: "Token unknown (table)"
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?(和任何人说,之前的"使用可选的存储过程,"这是行不通的.我需要的东西,我可以动态运行INSERT和SELECT对.)
我正在使用带有Entity Framework的Firebird ADO.NET提供程序,但这个问题也适用于其他提供程序.
我的模型上有一个字段如下
[Column("JOBNO"), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int JobNo { get; set; }
Run Code Online (Sandbox Code Playgroud)
在数据库中,我有一个'on insert'触发器,JOBNO如果JOBNO设置为,则使用生成器更新字段NULL
通过在我的模型字段上设置DatabaseGenerated属性DatabaseGeneratedOption.Identity,实体框架正确地JOBNO从插入数据库中提取数据.
但有时我想JOBNO在插入时手动指定列,但EF不理解并只使用生成的值.
有没有办法允许这个DataBaseGenerated字段的条件设置?
我需要计算 firebird base(版本 2.5)中两个日期之间的工作日
我有一个带有工作日(日期,天--空闲/工作)的表(table_date),我还有另一个带有start_date和end_date的表。例如,我们有两个日期 start_date=2015-04-04 和 end_date=2015-04-10 2015-04-05 和 2015-04-06 是免费的。这两个日期之间有 6 天,但 4 个工作日。
如何在基数中计算这个?
我试图通过顺序选择选项从Firebird DB获取数据.我想在我的代码中看到前500行.为了测试,我为每个'row'增加'k'并将'k'和'md5'记录到控制台.
当我运行我的代码时,它给我随机的行数.但行数总是超过500.
我怎么解决这个问题?有什么建议?
var Firebird = require('node-firebird');
var md5 = require('md5');
var options = {};
//options.host = '127.0.0.1';
//options.port = 3050;
options.database = '/Users/bla/mydb.FDB';
options.user = 'SYSDBA';
options.password = 'masterkey';
var pool = Firebird.pool(10, options);
var k = 0;
pool.get(function (err, db) {
if (err)
throw err;
db.sequentially('SELECT FIRST 500 SOME QUERY', function (row, index) {
k = k + 1;
console.log(k + ' => ' + md5(JSON.stringify(row)) + '\n');
}, function (err) {
db.detach();
});
});
Run Code Online (Sandbox Code Playgroud) 在此处的文档中,给出了以下代码示例cursor:
execute block
returns (
relation char(31),
sysflag int)
as
declare cur cursor for
(select rdb$relation_name, rdb$system_flag from rdb$relations);
begin
open cur;
while (1=1) do
begin
fetch cur into relation, sysflag;
if (row_count = 0) then leave;
suspend;
end
close cur;
end
Run Code Online (Sandbox Code Playgroud)
但这也可以按如下方式完成:
execute block
returns (
relation char(31),
sysflag int)
as
begin
for select rdb$relation_name, rdb$system_flag
from rdb$relations
into relation, sysflag
do begin
suspend;
end
end
Run Code Online (Sandbox Code Playgroud)
那我为什么要用一个呢?最终上面的例子甚至不需要,execlute block因为它只是一个简单的选择语句.所以我想这个例子太简单了,无法证明这一点.
我有这门课
public class Bill : EntityBase
{
public virtual decimal Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在下面的映射中,我使用a中的过程填充'Value'的值 Formula()
public class MapBill : ClassMap<Bill>
{
public MapBill()
{
Table("cabrec");
Map(m => m.Value)
.Formula(
"(select t.VALOR_IND from ret_vlorind(1,1,cast('02/06/1993' as Date)) as t)")
.CustomType(typeof(decimal));
}
}
Run Code Online (Sandbox Code Playgroud)
但它在执行时返回错误:
{"Dynamic SQL Error\r\nSQL error code = -104\r\nToken unknown - line 1, column 279\r\n."}
Run Code Online (Sandbox Code Playgroud)
有没有办法在流利的nhibernate中使用程序?
我正在使用来自"github.com/nakagami/firebirdsql"的firebird数据库驱动程序和GO1.11 + FB2.5
但我无法准备SELECT工作,它在执行第二个QUERYROW()时抛出"错误op_response:0"错误.有任何想法吗?
有没有替代司机?或者我使用不正确的驱动程序?
func test1(tx *sql.Tx) {
sqlStr := "SELECT number FROM order WHERE id=?"
stmt, err := tx.Prepare(sqlStr)
if err != nil {
panic(err.Error())
}
var value string
err = stmt.QueryRow(123).Scan(&value)
if err != nil {
panic(err.Error())
}
fmt.Println(value)
err = stmt.QueryRow(200).Scan(&value)
if err != nil {
panic(err.Error())
}
fmt.Println(value)
}
Run Code Online (Sandbox Code Playgroud)
结果:
INV20183121
panic: Error op_response:0
goroutine 1 [running]:
main.test1(0xc00009c000, 0xc0000a8200)
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Spring Data JDBC 和 Spring Boot 连接到 Firebird 数据库。我使用 Spring Tools 创建了一个简单的应用程序。Spring Data JDBC 无法识别方言。我认为问题在于DialectResolver它不支持 Firebird。
private static Dialect getDialect(Connection connection) throws SQLException {
DatabaseMetaData metaData = connection.getMetaData();
String name = metaData.getDatabaseProductName().toLowerCase(Locale.ENGLISH);
if (name.contains("hsql")) {
return HsqlDbDialect.INSTANCE;
}
if (name.contains("h2")) {
return H2Dialect.INSTANCE;
}
if (name.contains("mysql")) { // catches also mariadb
return new MySqlDialect(getIdentifierProcessing(metaData));
}
if (name.contains("postgresql")) {
return PostgresDialect.INSTANCE;
}
if (name.contains("microsoft")) {
return SqlServerDialect.INSTANCE;
}
if (name.contains("db2")) {
return Db2Dialect.INSTANCE;
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
我是 …