我目前正在运行Rails迁移,我正在添加一个特定于Postgres,tsvector的数据类型.它以Postgres期望的内置文本搜索功能的形式保存搜索信息.
这是我迁移的一行:
t.column "search_vectors", :tsvector
Run Code Online (Sandbox Code Playgroud)
一切似乎都运行正常,搜索也适用.但是,当我打开schema.rb时,这就是我得到的:
Could not dump table "users" because of following StandardError
Unknown type 'tsvector' for column 'search_vectors'
Run Code Online (Sandbox Code Playgroud)
这使我无法在用户表上运行单元测试,并且鉴于schema.rb应该是我的数据库的权威定义,这也让我觉得非常危险.
我注意到有许多Rails插件似乎使用了像我期望的那样存储tsvector的相同方法,例如tsearchable.我真的只是坚持没有测试,没有我的数据库的权威定义?
migration postgresql ruby-on-rails tsvector custom-data-type
我发现查询存在一些问题,该查询返回表中满足特定条件的所有记录的字段总和.我希望在没有记录的情况下收到"没有找到记录",但我收到的结果是空的.
SQL> SELECT * FROM DUAL WHERE 1=2;
no rows selected
SQL> SELECT SUM(dummy) FROM DUAL WHERE 1=2;
SUM(DUMMY)
----------
SQL>
Run Code Online (Sandbox Code Playgroud)
在这种情况下有没有办法不收到任何记录?
我有一个类型如下:
CREATE OR REPLACE TYPE tbusiness_inter_item_bag AS OBJECT (
item_id NUMBER,
system_event_cd VARCHAR2 (20),
CONSTRUCTOR FUNCTION tbusiness_inter_item_bag RETURN SELF AS RESULT
);
CREATE OR REPLACE TYPE BODY tbusiness_inter_item_bag
AS
CONSTRUCTOR FUNCTION tbusiness_inter_item_bag RETURN SELF AS RESULT
AS
BEGIN
RETURN;
END;
END;
Run Code Online (Sandbox Code Playgroud)
当我执行以下脚本时,我得到了一个"未初始化复合参考"错误,这是非常合适的.
DECLARE
item tbusiness_inter_item_bag;
BEGIN
item.system_event_cd := 'ABC';
END;
Run Code Online (Sandbox Code Playgroud)
这也引发了同样的错误:
item.item_id := 3;
Run Code Online (Sandbox Code Playgroud)
但如果我将我的对象类型更改为:
CREATE OR REPLACE TYPE tbusiness_inter_item_bag AS OBJECT (
item_id NUMBER(1),
system_event_cd VARCHAR2 (20),
CONSTRUCTOR FUNCTION tbusiness_inter_item_bag RETURN SELF AS RESULT
);
Run Code Online (Sandbox Code Playgroud)
然后最后一个语句不再引发错误(我的"项目"仍然未初始化):
item.item_id := 3; …Run Code Online (Sandbox Code Playgroud) 通常我必须在数据库中插入一些数据并且无法插入,因为该表具有阻止我这样做的约束.使用我正在开发的应用程序,一些业务规则(例如"没有两个具有相同id类型和编号的人"或"XXXX产品已经注册")是使用UNIQUE或复合密钥和其他机制强制执行的.虽然我知道DBMS会抛出错误消息(如ORA-6346或),但我不知道如何在.net 4.0中捕获这些错误并将它们转换为对业务层有意义的错误.
作为一个例子:我已经看到一个插入机制,询问数据库是否已存在该寄存器,然后如果不是这样,则继续插入数据.我想这样做只使用一个查询并捕获数据库约束违规错误,因为第一种方式在我看来效率非常低(DB可以提醒你有关重复的错误).
我怎么能实现这样的东西?
注意:我认为可以从数据库中捕获异常并使用其ORA-xxxx代码来试图弄清楚发生了什么.如果错误消息显示哪个约束(名称...)已被破坏,我不记得精确,但业务层代码可以包含具有约束名称的常量,并从中了解发生了什么.
当我使用我的C#代码运行pl/sql查询[通过存储过程]时,我收到一个错误:我该如何解决?请提供建议.注意:我在代码中为providerSpecificTypes传递false.
Error Message:
System.Data.OracleClient.OracleException: OCI-22053: overflow error
at System.Data.Common.DbDataAdapter.FillErrorHandler(Exception e, DataTable dataTable, Object[] dataValues)
at System.Data.Common.DbDataAdapter.FillLoadDataRowChunk(SchemaMapping mapping, Int32 startRecord, Int32 maxRecords)
at System.Data.Common.DbDataAdapter.FillFromReader(Object data, String srcTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)
at System.Data.Common.DbDataAdapter.FillFromCommand(Object data, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command,
Run Code Online (Sandbox Code Playgroud)
这是代码:
DataSet ds = new DataSet();
try
{
this.OpenDBConnection(); …Run Code Online (Sandbox Code Playgroud) 我的目标是,以"DESCENDING"顺序打印查询结果.但问题是,具有NULL值的行位于列表的顶部..如果order by降序,如何将空行放在底部?
select mysubcat.subcat
, mysubcat.subcatid as subcat_id
, (select SUM(myad.PAGEVIEW)
from myad
where MYAD.CREATEDDATE between '01-JUL-13 02.00.49.000000000 PM' and '13-JUL-13 02.00.49.000000000 PM'
AND MYAD.status = 1
and MYAD.mobileapp IS NULL
and myad.subcatid = mysubcat.subcatid )as web_views
from mysubcat
order by web_views desc;
Run Code Online (Sandbox Code Playgroud)
样本结果是这样的
SUBCAT_ID WEB_VIEWS
Swimming Lessons 56 (null)
Medical Services 17 (null)
Mobile Phones & Tablets 39 6519
Home Furnishing & Renovation 109 4519
Run Code Online (Sandbox Code Playgroud)
顺序是降序,我只是想在打印结果的底部放置带有空值的行,那怎么样?
我正在创建一个包来生成我的模式中的对象的DDL(您解析对象名称,并返回一个clobDDL),所以我可以生成文件,并将它们直接放入SVN.
我正在使用dbms_metadata.get_ddl它,它适用于除表/物化视图之外的所有对象.
如果我创建一个表:
create table stackoverflow
( col_1 varchar2(64)
, col_2 number
, col_3 date);
create index idx_test on stackoverflow(col_1);
alter table stackoverflow add constraint ui_test unique (col_2) using index;
Run Code Online (Sandbox Code Playgroud)
并生成DDL:
begin
dbms_output.put_line(dbms_metadata.get_ddl( object_type => 'TABLE'
, name => 'STACKOVERFLOW')
);
end;
Run Code Online (Sandbox Code Playgroud)
它给了我们:
CREATE TABLE "TEST_SCHEMA"."STACKOVERFLOW"
( "COL_1" VARCHAR2(64),
"COL_2" NUMBER,
"COL_3" DATE,
CONSTRAINT "UI_TEST" UNIQUE ("COL_2")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 131072 NEXT 131072 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE …Run Code Online (Sandbox Code Playgroud) 我需要更改Oracle XE数据库的SID(而不是服务名称)以匹配生产数据库.
当我尝试在线搜索时,大多数页面都是通过tnsnames.ora描述更改或添加服务名称; 那不是我需要做的.
我只是想问一下我们是否可以从Google App Engine访问外部MySQL服务器...
我有一个表T1,它包含一个NAME值(不是唯一的),一个日期范围(D1和D2是日期)当NAME相同时,我们建立一个日期范围的联合(例如B).
但作为结果(X),我们需要交叉所有日期范围
编辑:表T1
NAME | D1 | D2
A | 20100101 | 20101211
B | 20100120 | 20100415
B | 20100510 | 20101230
C | 20100313 | 20100610
Run Code Online (Sandbox Code Playgroud)
结果:
X | 20100313 | 20100415
X | 20100510 | 20100610
Run Code Online (Sandbox Code Playgroud)
在视觉上,这将给出以下内容:
NAME : date range
A : [-----------------------]-----
B : --[----]----------------------
B : ----------[---------------]---
C : -----[--------]---------------
Run Code Online (Sandbox Code Playgroud)
结果:
X : -----[-]----------------------
X : ----------[---]---------------
Run Code Online (Sandbox Code Playgroud)
知道如何使用SQL/PL SQL获得它吗?
oracle ×8
plsql ×3
sql ×3
architecture ×2
.net ×1
ado.net ×1
c# ×1
date-range ×1
ddl ×1
external ×1
migration ×1
mysql ×1
oracle-xe ×1
postgresql ×1
service-name ×1
sid ×1
sum ×1
tsvector ×1