我想在我们的sql数据库中的一个表中进行批量上传.之前,当我们在不同的服务器上安装数据库时,此查询运行良好,但现在在新服务器上我收到错误.这就是我所拥有的:sql bulk import query:
BULK
INSERT NewProducts
FROM 'c:\newproducts.csv'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
GO
Run Code Online (Sandbox Code Playgroud)
而我得到的错误是:
Msg 4832, Level 16, State 1, Line 1
Bulk load: An unexpected end of file was encountered in the data file.
Msg 7399, Level 16, State 1, Line 1
The OLE DB provider "BULK" for linked server "(null)" reported an error. The provider did not give any information about the error.
Msg 7330, Level 16, State 2, Line 1
Cannot …Run Code Online (Sandbox Code Playgroud) 尽管花了一个小时研究我似乎无法弄清楚如何正确定义变量然后在SQL中使用它.
这是我到目前为止所做的:
DECLARE startDate DATE := to_date('03/11/2011', 'dd/mm/yyyy');
其中我得到了答复:
ORA-06550:第1行,第63列:PLS-00103:遇到以下某种情况时遇到符号"文件结束":
begin function package pragma procedure子类型使用form current cursor
详情:DECLARE startDate DATE:= to_date('03/11/2011','dd/mm/yyyy'); 第1行错误ORA-06550:第1行第63列:PLS-00103:遇到以下某种情况时遇到符号"文件结束":
begin function package pragma procedure子类型使用form current cursor
我很想知道如何做这么简单的任务!
我正在尝试使用pymssql(带有Python 2.7.1的版本2.0.0b1-dev-20111019)从Windows框连接到SQL Server实例.我从控制台尝试了最基本的方法:
import pymssql
c = pymssql.connect(host = r'servername\instance',
user = 'username',
password = 'userpassword')
Run Code Online (Sandbox Code Playgroud)
为此,我得到了非常有用的错误: InterfaceError: Connection to the database failed for an unknown reason.
我有理由相信连接信息是正确的,因为当我使用adodbapi时,它可以使用以下命令:
import adodbapi
c = adodbapi.connect(r'Provider=sqloledb;Data Source=servername\instance;User ID=username;password=userpassword;'
c.close
Run Code Online (Sandbox Code Playgroud)
我尝试将端口号添加到host参数,结果相同.有没有人建议如何解决这个问题?
顺便说一句,我已阅读" 无法通过pymssql连接到SQL Server "的响应.OP最终通过正确配置FreeTDS解决了他的问题,据我所知,在Windows上pymssql没有使用它.
根据@ cha0site的建议,我尝试仅使用主机名,而不是主机名和实例.这导致了相同的错误,但似乎需要更长的时间来生成错误(尽管回溯仍然指示相同的行).我一直在指定实例的原因是我无法使用SSMS进行连接,除非我指定了实例,因此我认为它对于其他连接是必要的.
我现在也试过pymssql.connect(host='servername', user='username', password='userpassword', database='instance')相同的结果(基于@Sid的评论).基于pymssql文档,我相信该database参数用于指定用户要连接的初始数据库,而不是实例.
只是为了澄清,"实例"是安装SQL Server时提供的名称,而不是该安装中的数据库.我发现pymssql可能不支持这种表示法,因此我将研究重新配置SQL Server实例,以便它不是必需的.
我现在重新安装SQL Server作为默认实例,而不是命名实例,它允许我连接而不指定实例名称.adodbapi仍然有效(没有/instance),但pymssql仍然返回相同的错误.我还pymssql从新下载的存档(仍然是相同的版本)中删除并重新安装.
我有一个Oracle数据库软件包,它经常导致我认为是ITL(感兴趣的事务列表)的死锁.跟踪文件的相关部分如下所示.
Deadlock graph:
---------Blocker(s)-------- ---------Waiter(s)---------
Resource Name process session holds waits process session holds waits
TM-0000cb52-00000000 22 131 S 23 143 SS
TM-0000ceec-00000000 23 143 SX 32 138 SX SSX
TM-0000cb52-00000000 30 138 SX 22 131 S
session 131: DID 0001-0016-00000D1C session 143: DID 0001-0017-000055D5
session 143: DID 0001-0017-000055D5 session 138: DID 0001-001E-000067A0
session 138: DID 0001-001E-000067A0 session 131: DID 0001-0016-00000D1C
Rows waited on:
Session 143: no row
Session 138: no row
Session 131: no row
Run Code Online (Sandbox Code Playgroud)
此表上没有位图索引,因此不是原因.据我所知,缺少"行等待"加上Waiter等待列中的"S"可能表明这是ITL的死锁.此外,该表经常被写入(大约8次插入或同时更新,通常每分钟240次),因此ITL死锁似乎很有可能.
我增加了表的INITRANS参数,它的索引为100,并将表上的PCT_FREE从10增加到20(然后重建了索引),但死锁仍在发生.在更新期间,僵局似乎最常发生,但这可能只是巧合,因为我只追踪了几次.
我的问题有两方面:
1)这实际上是ITL的僵局吗? …
我的.NET代码目前正在使用ODP.NET多次调用存储过程来操作许多表中的各个行..NET代码有一组要更改的行.每次调用只改变一个参数,我想将数组从.NET传递给PL/SQL以在多行上运行(行数将改变).
我使用以下方法成功地将数组从.NET传递到PL/SQL:
type number_arr is table of number(10) index by pls_integer;
PROCEDURE "BLAH" (foo IN number_arr);
Run Code Online (Sandbox Code Playgroud)
请注意,我认为number_arr被称为VARRAY,但我对此并不乐观,如果有人想要纠正我,请做(作为评论),但这可能会导致我的困惑.
但是现在,在PL/SQL中,我有许多更新语句,它们看起来像:
UPDATE t SET a = b WHERE a = foo;
Run Code Online (Sandbox Code Playgroud)
当foo不是一个数组时.我现在想写:
UPDATE t SET a = b WHERE a IN (foo);
Run Code Online (Sandbox Code Playgroud)
但是这种语法似乎不起作用.我一直无法找到一个结合使用VARRAY和'IN'(或'ANY'等)的Oracle的例子.我已经看到了如何使用SQL Server做到这一点的一些答案,但我不确定如何将其转换为Oracle.
当然,如果还有其他方法可以将数组从.NET运行到存储过程来执行此操作,那么这也将回答我的问题.我希望通过IN获得效率,所以在PL/SQL中对数组进行迭代(分别调用UPDATE语句)可能无济于事.
我正在尝试创建一个可以部署在多个数据库上的发布脚本,但是可以在以后将数据合并在一起.处理此问题的显而易见的方法是在后续部署中将生产数据的序列号设置得足够高以防止冲突.
问题在于提出一个发布脚本,该脚本将接受环境编号并适当地设置序列的"Start With"值.理想情况下,我想使用这样的东西:
ACCEPT EnvironNum PROMPT 'Enter the Environment Number: '
--[more scripting]
CREATE SEQUENCE seq1 START WITH &EnvironNum*100000;
--[more scripting]
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为您无法在DDL中计算数值表达式.
另一种选择是通过PL/SQL使用动态SQL创建序列.
ACCEPT EnvironNum PROMPT 'Enter the Environment Number: '
--[more scripting]
EXEC execute immediate 'CREATE SEQUENCE seq1 START WITH ' || &EnvironNum*100000;
--[more scripting]
Run Code Online (Sandbox Code Playgroud)
但是,我宁愿避免这种解决方案,因为我通常会尽量避免在PL/SQL中发出DDL.
最后,我提出的第三个选项是简单地接受Start With值作为替换变量,而不是环境号.
有没有人更好地考虑如何解决这个问题?
我正在编写一个模块来处理从Python发送到数据库的数据.由于boolean不是SQL数据类型,因此必须将这些值转换为某个预定义值.我决定在定义表时,我会在varchar(1)字段中使用'T'和'F'作为我的布尔值.
在尝试使用Pythonic时进行此转换时,我进行了直接比较并对结果采取了行动,如下所示:
if SQLParameters[i] == True:
SQLParameters[i] = 'T'
elif SQLParameters[i] == False:
SQLParameters[i] = 'F'
Run Code Online (Sandbox Code Playgroud)
这是在不管类型的情况下运行的代码,因此如果SQLParameters[i]是1或"Blarg"或123,我只想不管它,而当它是布尔值时,我需要执行转换.
这工作得很好,直到我试图插入实际值1(一),此时我学会了1 == True = True.我可以清楚地看到这个问题的两种可能的解决方案:
有没有人知道如何在不更改数据字典或显式检查类型的情况下完成此操作?
我正在尝试使用内部联接编写一个简单的更新语句,但我在SQL Server中执行此操作的方式似乎在ORACLE中不起作用.这是更新:
UPDATE D
SET D.USER_ID = C.USER_ID
FROM D INNER JOIN C
ON D.MGR_CD = C.MGR_CD WHERE D.USER_ID IS NULL;
Run Code Online (Sandbox Code Playgroud)
似乎我得到的错误是在FROM.有人可以解释,以了解这是什么原因以及如何解决它?
我想创建每天20:00运行 30 分钟的oracle 调度程序作业。此作业将从KPI_LOGS表中删除行,因为该表包含大量数据并且它会继续增长。我已经在 oracle sql developer 中为这样的工作创建了以下脚本,但不确定这是否正确,因为我是调度程序工作概念的新手。
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => '"RATOR_MONITORING"."CROP_KPI_LOGS"',
job_type => 'PLSQL_BLOCK',
job_action => 'DELETE FROM KPI_LOGS WHERE CAST(TIMESTAMP AS DATE) < (SYSDATE - 28);',
number_of_arguments => 0,
start_date => NULL,
repeat_interval => 'FREQ=DAILY;INTERVAL=30',
end_date => NULL,
enabled => FALSE,
auto_drop => FALSE,
comments => 'CROP_KPI_LOGS');
DBMS_SCHEDULER.SET_ATTRIBUTE(
name => '"RATOR_MONITORING"."CROP_KPI_LOGS"',
attribute => 'logging_level', value => DBMS_SCHEDULER.LOGGING_OFF);
DBMS_SCHEDULER.enable(
name => '"RATOR_MONITORING"."CROP_KPI_LOGS"');
END;
Run Code Online (Sandbox Code Playgroud) 我正在开发一个应用程序,它在一个事务中写入一个表然后读取该表.一旦完成读取,就不再需要这些更改,可以安全地丢弃.但另一方面,如果提交的话,更改不会干扰任何其他内容.
简而言之,我可以使用rollback或commit来结束事务,只需考虑效率.
那么哪一个会比另一个更快,为什么呢?