我在同一个Oracle用户上有两个不同的Oracle会话("会话A"和"会话B").
在"会话A"中填充全局临时表,其中包含大约320,000条记录.
如何在"会话B"的全局临时表中快速插入相同的320,000条记录?
提前感谢您的善意建议!
编辑:我忘了指定我只允许创建全局临时表.
编辑:我忘了指定我不允许创建数据库链接
我注意到这两个系统中临时表的概念是不同的,我有一个冥想......我在MySQL中有以下场景:
如何在Oracle中实现相同的方案?我可以(在一个程序中更可取)创建一个临时表,填充它,并在另一个(非临时)表中插入数据吗?
我认为我可以使用在提交时截断的(全局)临时表,并避免步骤1和2,但我也需要别人的意见.
我试图将几个存储过程的结果合并到一个临时表中.各种存储过程的结果具有相同的列结构.从本质上讲,我想UNION ALL各种存储过程的结果.一个重要的事实:每个存储过程都创建一个临时表来存储其数据,每个返回的结果都基于对临时表的选择:
create proc SP1
as
.
. <snip>
.
select * from #tmp -- a temporary table
Run Code Online (Sandbox Code Playgroud)
注意,select * from OPENQUERY(server, 'exec SP1')如果SP1中的select对临时表不起作用(有关详细信息,请参阅此问题),是否有另一种方法可以将不同的存储过程SP2发送到临时表中执行SP1的结果?
create proc SP2 as
-- put results of executing SP1 into a temporary table:
.
.
.
Run Code Online (Sandbox Code Playgroud)
注意:无法修改SP1(例如,将其结果存储在具有会话范围的临时表中).
CREATE TABLE #TempProducts (
Id uniqueidentifier,
ManufacturerId uniqueidentifier,
Number varchar(50),
PresentId uniqueidentifier null)
Run Code Online (Sandbox Code Playgroud)
如何更新 PresentId 字段?我在这方面有不同的错误:
1) 数据库中已有一个名为“#TempProducts”的对象。
UPDATE #TempProducts
SET #TempProducts.PresentId = p.Id
FROM #TempProducts JOIN Products p ON (#TempProducts.ManufacturerId = p.ManufacturerId AND #TempProducts.Number = p.Number)
WHERE #TempProducts.Id <> p.Id
Run Code Online (Sandbox Code Playgroud)
2) 无法绑定多部分标识符“t.PresentId”。
UPDATE #TempProducts
SET t.PresentId = p.Id
FROM #TempProducts t JOIN Products p ON (t.ManufacturerId = p.ManufacturerId AND t.Number = p.Number)
WHERE t.Id <> p.Id
Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我需要创建几个临时表。我是否需要在每个会话中执行 SQL 来创建临时表,否则我可以手动运行一次 SQL,并且可以在每个会话中使用这些临时表吗?
我有一个 MySQL 查询,它使用 3 个表和 2 个内部联接。然后,我必须从这个查询输出中找到一个组的最大值。将它们结合起来超出了我的范围。我可以通过将第一个复杂查询的输出存储到某种临时表中,给它一个名称,然后在新查询中使用这个表来分解问题吗?这将使代码更易于管理。感谢您的帮助。
我搜索并找到了这篇关于 SQL Server 中临时表的文章,因为我在我们的一个存储过程中遇到了一行说:
SELECT Value SomeId INTO #SomeTable FROM [dbo].[SplitIds](@SomeIds, ';')
Run Code Online (Sandbox Code Playgroud)
我知道它#SomeTable是tempdb作为临时表存储的。但是,我不明白为什么我们不必先使用,CREATE TABLE #SomeTable因为它是在提到的文章中写的。我们的代码运行良好,我只是不明白为什么使用SELECT ... INTO #SomeTable. CREATE TABLE #SomeTable一开始加的话会有什么后果?我们会得到性能上的任何差异吗?该表会存储在另一个位置吗?
CREATE VIEW viewRebalancingLog AS
CREATE TEMP TABLE newSessionID
(
ilog_id INT,vch_service_name VARCHAR(200), vch_service_id VARCHAR(200),iuser_id INT,vch_session_id VARCHAR(200),
isequence_id INT,vch_message_type VARCHAR(200),vch_message_sub_type VARCHAR(200),vch_message VARCHAR,
dt_service_log_time TIMESTAMP,dt_inserted_date TIMESTAMP
)
INSERT INTO newSessionID
("ilog_id", "vch_service_name", "vch_service_id" , "iuser_id" , "vch_session_id" , "isequence_id" ,
"vch_message_type" ,"vch_message_sub_type","vch_message","dt_service_log_time","dt_inserted_date"
)
SELECT
"LOGS"."ilog_id", "LOGS"."vch_service_name","LOGS"."vch_service_id","LOGS"."iuser_id" ,"LOGS"."vch_session_id" ,
"LOGS"."isequence_id" ,"LOGS"."vch_message_type" ,"LOGS"."vch_message_sub_type" ,"LOGS"."vch_message",
"LOGS"."dt_service_log_time","LOGS"."dt_inserted_date"
FROM services_logs_stg AS "LOGS"
WHERE ("LOGS".dt_service_log_time AT TIME ZONE 'UTC' AT TIME ZONE 'America/New_York') :: DATE =
(((NOW() -
INTERVAL '2 day') :: TIMESTAMP) AT TIME ZONE 'UTC' AT …Run Code Online (Sandbox Code Playgroud) 我正在将 CSV 加载到这样的临时表中:
select *
into #Temp
from openrowset('Microsoft.ACE.OLEDB.12.0',
'Text;Database=D:\DataFolder;',
'SELECT * from [DataFile.csv]') as x;
Run Code Online (Sandbox Code Playgroud)
OLEDB 驱动程序确定每列的类型。
但是临时表不会出现在INFORMATION_SCHEMA.COLUMNS.
如何确定结果#Temp表中每一列的数据类型?
我正在寻找创建一个临时表并向其中插入一些数据。我已经广泛使用 pyodbc 来提取数据,但我不熟悉从 python 环境将数据写入 SQL。我在工作中这样做,所以我没有能力创建表,但我可以创建临时表和全局临时表。我的意图是将一个相对较小的数据帧(150 行 x 4cols)插入到临时表中并在我的整个会话中引用它,我的程序结构使得会话中的全局变量不够用。我在尝试时收到以下错误下面的一块,我做错了什么?
pyodbc.ProgrammingError: ('42S02', "[42S02] [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name 'sqlite_master'. (208) (SQLExecDirectW); [42S02] [Microsoft][ODBC SQL Server Driver][SQL Server]Statement(s) could not be prepared. (8180)")
import numpy as np
import pandas as pd
import pyodbc
conn = pyodbc.connect('Driver={SQL Server};'
'Server=SERVER;'
'Database=DATABASE;'
'Trusted_Connection=yes;')
cursor = conn.cursor()
temp_creator = '''CREATE TABLE #rankings (Col1 int, Col2 int)'''
cursor.execute(temp_creator)
df_insert = pd.DataFrame({'Col1' : [1, 2, 3], 'Col2':[4,5,6]})
df_insert.to_sql(r'#rankings', conn, if_exists='append')
read_query = '''SELECT * FROM #rankings''' …Run Code Online (Sandbox Code Playgroud) temp-tables ×10
sql ×3
sql-server ×3
mysql ×2
oracle ×2
postgresql ×2
t-sql ×2
database ×1
metadata ×1
pandas ×1
pyodbc ×1
python-3.x ×1
view ×1