Sql


Per cambiare lo schema di una tabella in realtà la si deve trasferire nello schema destinazione attraverso il comando ALTER SCHEMA.

L’esempio seguente (preso dalla documentazione Microsoft) modifica lo schema HumanResources trasferendoci la tabella Address dallo schema Person.

USE AdventureWorks;
GO
ALTER SCHEMA HumanResources TRANSFER Person.Address;
GO

Per rinominare una tabella si può utilizzare la procedura sp_rename:

EXEC sp_rename 'NomeTabella', 'Nuovo_NomeTabella'

NomeTabella deve comprendere l’eventuale schema, mentre Nuovo_NomeTabella no.

Per rinominare una colona:

EXEC sp_rename 'NomeTabella.[NomeColonna]', 'NomeTabella.[Nuovo_NomeColonna]', 'COLUMN'

Questa query visualizza tutti i trigger, con il loro stato, di un singolo db.

SELECT T.[name] as TableName, TR.[Name] as TriggerName, CASE WHEN 1=OBJECTPROPERTY(TR.[id], 'ExecIsTriggerDisabled')THEN 'Disabled' ELSE 'Enabled' END Status

FROM sysobjects T INNER JOIN sysobjects TR on t.[ID] = TR.parent_obj

WHERE (T.xtype = 'U' or T.XType = 'V') AND (TR.xtype = 'TR') ORDER BY T.[name], TR.[name] 

Quando si importa un database in SQL Server con un suo utente e schema bisogna fixare le login con il seguente comando:

EXEC sp_change_users_login ‘Auto_Fix’, ‘user’, NULL, ‘pwd’;

Fornisce la lista di tutte le tabelle dello schema:

SELECT table_name FROM SYS.DBA_TABLES WHERE owner = ‘…’;
SELECT table_name FROM SYS.ALL_ALL_TABLES WHERE owner = ‘…’;
con la 9i

Fornisce la lista dei constraint di uno schema:

SELECT OWNER, CONSTRAINT_NAME, CONSTRAINT_TYPE, TABLE_NAME, SEARCH_CONDITION, R_OWNER, R_CONSTRAINT_NAME, DELETE_RULE, STATUS, DEFERRABLE, DEFERRED, VALIDATED, GENERATED, BAD, RELY, LAST_CHANGE, INDEX_OWNER, INDEX_NAME, INVALID, VIEW_RELATED FROM SYS.DBA_CONSTRAINTS WHERE OWNER = ‘…’

Generare script per cancellare tutte le tabelle di un utente Oracle:

SELECT ‘drop table ‘ || table_name || ‘; ‘ FROM SYS.DBA_TABLES WHERE owner = ‘…’;

Viste con dati tabelle UTENTE corrente

USER_TABLE
USER_TABLESPACES
USER_TAB_COLUMNS

Riavviare un server bloccato per mancanza processi

Questa procedura è utile quando un server si blocca (non accetta più nuove connessioni) perché ha esaurito i processi si SO.

Killare qualche processo oracle, quindi

$sqlplus /nolog
SQL*Plus: Release 9.2.0.5.0 – Production on Thu Jan 5 11:37:22 2006
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
SQL> connect / as sysdba
Connected.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started

Per visualizzare un xml:

visualizzare il campo xml nella tabella p_project composta dal campo id integer e dal campo xml xmltype.
SELECT t.id, t.xml.getClobVal() FROM p_project t

Per inserire un xml:

Attenzione al limite massimo di 4k, per xml più grandi bisogna usare il metodo file-directory.
Inserire un xml nella tabella p_group composta dal campo id int e dal campo xml xmltype.
DECLARE v_xml SYS.XMLTYPE; v_doc CLOB;
BEGIN
v_doc := ‘…’;
v_xml := sys.xmltype.createXML(v_doc);
INSERT INTO p_group (id, xml) VALUES (2, v_xml);
COMMIT;
END;

Per modificare:

Attenzione al limite massimo di 4k.
Modificare un xml nella tabella p_acl composta dal campo id int e dal campo xml xmltype.
DECLARE
v_xml SYS.XMLTYPE; v_doc CLOB;
BEGIN
v_doc := ‘…’;
v_xml := sys.xmltype.createXML(v_doc);
UPDATE p_acl SET xml = v_xml WHERE id=13;
COMMIT;
END;