有没有人知道我在这里做错了什么?我试图将一个blob(包含一个重要的pdf)插入一个oracle db以及一些其他信息.我正在使用PreparedStatement
码:
public void saveReportErgebnis(int reportId, Date erzeugung, int archiv,
Blob pdf, String kommentar) throws Exception {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] tmp = new byte[(int) pdf.length()];
if(kommentar == null){
kommentar = "";
}
SimpleDateFormat erstellungSdf = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
try {
pdf.getBinaryStream().read(tmp);
oracle.sql.BLOB oracleBlob = new oracle.sql.BLOB((OracleConnection) getConnection(), tmp);
PreparedStatement prepStmt = getRTTDBHandler()
.createPreparedStatement(
"INSERT INTO reportergebnis(report_id, erzeugung, archiv, pdf, kommentar) VALUES (?,?,?,?,?)");
System.out.println("debug 2 oracle");
prepStmt.setInt(1, reportId);
prepStmt.setString(2, formatDateString(erstellungSdf.format(erzeugung)));
prepStmt.setInt(3, archiv);
prepStmt.setBlob(4, oracleBlob);
prepStmt.setString(5, kommentar); …Run Code Online (Sandbox Code Playgroud) 如何在oracle中插入包含引号的字符串?我的代码是
INSERT INTO TIZ_VADF_TL_MODELS (name)
VALUES ('xxx'test'yy');
Run Code Online (Sandbox Code Playgroud)
如果我使用
INSERT INTO TIZ_VADF_TL_MODELS (name)
VALUES ("xxx'test'yy");
Run Code Online (Sandbox Code Playgroud)
我得到标识符太长错误,因为xxx'test'yy是clob.
我怎样才能做到这一点?
谢谢.
我正在使用SQL Server.对于每一个:
select * from ServiceItems where Itemtypeid=7004 (query1)
Run Code Online (Sandbox Code Playgroud)
我想在同一个表中插入三个新行,如:
(ItemID, PackageID, ItemTypeID, ServiceID, ItemName, CreatedDate) VALUES
(19377, 5352, 7007, 2011, N'L1', '11/11/2015 6:50:51 PM'),
(19378, 5352, 7008, 2011, N'M1', '11/11/2015 6:50:51 PM'),
(19376, 5352, 7006, 2011, N'W1', '11/11/2015 6:50:51 PM')
ItemID = is the primary key
PackageID = one from query1
ItemTypeID = as it is 7006,7007,700
ServiceID = one from query1
ItemName = as it is L1,M1,W1
CreatedDate = time now
Run Code Online (Sandbox Code Playgroud)
我试过了 INSERT INTO SELECT...
INSERT INTO ServiceItems …Run Code Online (Sandbox Code Playgroud) 我试图在表格中插入1,500,000条记录.我在插入过程中面临表锁定问题.所以我想出了下面的批量插入.
DECLARE @BatchSize INT = 50000
WHILE 1 = 1
BEGIN
INSERT INTO [dbo].[Destination]
(proj_details_sid,
period_sid,
sales,
units)
SELECT TOP(@BatchSize) s.proj_details_sid,
s.period_sid,
s.sales,
s.units
FROM [dbo].[SOURCE] s
WHERE NOT EXISTS (SELECT 1
FROM dbo.Destination d
WHERE d.proj_details_sid = s.proj_details_sid
AND d.period_sid = s.period_sid)
IF @@ROWCOUNT < @BatchSize
BREAK
END
Run Code Online (Sandbox Code Playgroud)
我在Destination表上有一个聚簇索引(proj_details_sid ,period_sid ).NOT EXISTSpart只是为了限制插入的记录再次插入表中
我做得对吗,这会避免表锁吗?还是有更好的方法.
注意:批次和没有批量插入时间或多或少相同
我正在创建一个volatile表并尝试向表中插入行.我可以上传一行如下...
create volatile table Example
(
ProductID VARCHAR(15),
Price DECIMAL (15,2)
)
on commit preserve rows;
et;
INSERT INTO Example
Values
('Steve',4);
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试上传多个时,我收到错误:
"语法错误:预期在')'和','之间."
INSERT INTO Example
Values
('Steve',4),
('James',8);
Run Code Online (Sandbox Code Playgroud) 在postgres中是否可能在1)INSERT INTO和2)UPDATE之后从多个表返回数据?
例如,假设以下人为的示例:
review fit
------ ----
id id
fit_id label
body
Run Code Online (Sandbox Code Playgroud)
1)如何插入检查表并在RETURNING子句中返回与检查数据结合的各个拟合数据?
因此,要插入的SQL没有完成所需的结果:
INSERT INTO review (id, fit_id, body) VALUES (5, 1, 'some copy') RETURNING *;
Run Code Online (Sandbox Code Playgroud)
但是,所需的结果是:
id | 5
fit_id | 1
body | some copy
id | 1
label | some label
Run Code Online (Sandbox Code Playgroud)
2)如何更新评论fit_id并在RETURNING子句中返回与评论数据结合的新拟合数据?
SQL将fit_id更新2为审阅5而未完成所需结果:
UPDATE review SET fit_id = 2 WHERE review_id = 5 RETURNING *;
Run Code Online (Sandbox Code Playgroud)
但是,所需的结果是:
id | 5
fit_id | 2
body | some copy
id | 2
label | some …Run Code Online (Sandbox Code Playgroud) 我正在使用 Postresql 9.3.5。我在实体“Foo”和“Bar”之间存在多对多关系,我将其建模为如下所示:
CREATE TABLE Foo
(
id SERIAL PRIMARY KEY NOT NULL,
.... various columns for foo ....
);
CREATE TABLE Bar
(
id SERIAL PRIMARY KEY NOT NULL,
field1 varchar(50) UNIQUE NOT NULL,
.... various columns for bar ....
);
CREATE TABLE FooBar
(
fooID int NOT NULL,
barID int NOT NULL,
PRIMARY KEY (fooID, barID),
FOREIGN KEY (fooID) REFERENCES Foo(id),
FOREIGN KEY (barID) REFERENCES Bar(id)
);
Run Code Online (Sandbox Code Playgroud)
现在我要做的就是在 Foo 中插入一条记录,在 Bar 中插入一条相应的记录,然后插入包含 foo 和 bar 条目 id 的匹配 …
需要向uuid类型没有NOT NULL规范(非主键)的字段插入空值。
当我尝试插入 '' 时,返回:
ERROR: invalid input syntax for uuid: ""
Run Code Online (Sandbox Code Playgroud)
当我尝试插入 null 时,返回:
ERROR: null value in column "uuid" violates not-null constraint
Run Code Online (Sandbox Code Playgroud)
怎么做?
psql 9.3.5
SQL:
INSERT INTO inv_location (address_id)
VALUES (null)
Run Code Online (Sandbox Code Playgroud) 我只是发现如果没有行受到影响,语句触发器也会执行。有趣 - 但无论如何 - 有没有办法让行不受影响,或者至少是否有行受到影响?
触发器在插入语句之后。
我在 PostgreSQL 中创建了这个 PL/pgSQL 触发器函数:
CREATE or replace FUNCTION public.trigger31()
RETURNS trigger
LANGUAGE 'plpgsql'
COST 100
VOLATILE NOT LEAKPROOF
AS $BODY$
begin
if(TG_OP='INSERT') then
if(New.start_date>(select max(end_date) from "Semester") and New.end_date>New.start_date) then
Insert Into "Semester" (semester_id,academic_year,academic_season,start_date,end_date,semester_status)
values (New.semester_id=(select max(s.semester_id)+1 from "Semester" s):: integer,
new.academic_year= academic_year_trig(),
new.academic_season=academic_season_trig(),
new.start_date,new.end_date,
new.semester_status=semester_stat_trig()
);
return NEW;
else
RAISE EXCEPTION 'Invalid start_date or end_date';
end if;
end if;
end;
$BODY$;
Run Code Online (Sandbox Code Playgroud)
尝试执行它,我收到此错误:
Run Code Online (Sandbox Code Playgroud)ERROR: column "semester_id" is of type integer but expression is of type boolean LINE 2: values …
postgresql plpgsql auto-increment database-trigger sql-insert
sql-insert ×10
postgresql ×5
sql ×5
oracle ×2
sql-server ×2
batch-insert ×1
blob ×1
clob ×1
java ×1
join ×1
null ×1
plpgsql ×1
sql-update ×1
string ×1
t-sql ×1
teradata ×1