65 suosituinta PL / SQL-haastattelukysymystä & Vastaukset

Anonim

Lataa PDF

1) Mikä on PL SQL?

PL SQL on proseduurikieli, jolla on interaktiivinen SQL, samoin kuin proseduraalisen ohjelmointikielen rakenteet, kuten ehdollinen haarautuminen ja iterointi.

2) Tee ero% ROWTYPE- ja TYPE RECORD -kohtien välillä.

% ROWTYPE käytetään, kun kysely palauttaa koko taulukon tai näkymän rivin.

Toisaalta TYPE RECORD -toimintoa käytetään, kun kysely palauttaa sarakkeen eri taulukoista tai näkymistä.

Esimerkiksi. TYPE r_emp on RECORD (sno smp.smpno% type, sname smp sname% type)

e_rec smp% ROWTYPE

Kohdistin c1 on valittu smpno, osasto smp: stä;

e_rec c1% ROWTYPE

3) Selitä kohdistimen käyttötavat.

Kohdistin on nimetty yksityinen alue SQL: ssä, josta tietoja voidaan käyttää. Heidän on käsiteltävä kukin rivi erikseen kyselyille, jotka palauttavat useita rivejä.

4) Näytä silmukan kohdistimen koodi.

Kohdistin ilmoittaa% ROWTYPE -silmukan indeksinä implisiittisesti. Sen jälkeen se avaa kohdistimen, hakee rivit aktiivisen joukon tietueen kenttiin ja sammuu, kun kaikki tietueet on käsitelty.

Esimerkiksi. FOR smp_rec C1-SILMUKASSA

yhteensä summa = summa yhteensä + smp_recsal;

LOPPU;

5) Selitä tietokannan liipaisimen käyttötavat.

Tiettyyn tietokantataulukkoon liittyvää PL / SQL-ohjelmayksikköä kutsutaan tietokannan liipaisimeksi. Sitä käytetään:

1) Tarkastustietojen muutokset.

2) Kirjaa tapahtumat avoimesti.

3) Täytä monimutkaiset liiketoimintasäännöt.

4) Ylläpidä kopiotaulukoita

5) Johda sarakearvot

6) Ota käyttöön monimutkaiset suojausvaltuutukset

6) Mitkä ovat kaksi poikkeustyyppiä.

Virheen käsittely PL / SQL-lohkon osaa kutsutaan poikkeukseksi. Heillä on kaksi tyyppiä: user_defined ja preefined.

7) Näytä joitain ennalta määriteltyjä poikkeuksia.

DUP_VAL_ON_INDEX

ZERO_DIVIDE

DATAA EI LÖYTYNYT

TOO_MANY_ROWS

CURSOR_ALREADY_OPEN

VÄÄRÄ NUMERO

INVALID_CURSOR

PROGRAM_ERROR

TIMEOUT _ON_RESOURCE

STORAGE_ERROR

LOGON_DENIED

VALUE_ERROR

jne.

8) Selitä Raise_application_error.

Se on paketin DBMS_STANDARD menettely, joka sallii käyttäjän määrittelemien virhesanomien lähettämisen tietokannan liipaisimesta tai tallennetusta aliohjelmasta.

9) Näytä, kuinka funktioita ja menettelyjä kutsutaan PL SQL-lauseessa.

Funktiota kutsutaan osana lauseketta.

yhteensä: = laskea_sal ('b644')

Menettely kutsutaan lauseeksi PL / SQL: ssä.

laskea_bonus ('b644');

10) Selitä kaksi virtuaalitaulukkoa, jotka ovat käytettävissä tietokannan laukaisun suorittamisen yhteydessä.

Taulukon sarakkeisiin viitataan THEN.column_name ja NOW.column_name.

INSERT-liipaisimille NOW.column_name-arvot ovat käytettävissä vain.

DELETE-liipaisimille THEN.column_name-arvot ovat käytettävissä vain.

UPDATE-aiheisiin laukaisimiin molemmat taulukon sarakkeet ovat käytettävissä.

11) Mitä sääntöjä on sovellettava NULL-arvoihin verrattaessa?

1) NULL ei ole koskaan TOSI tai EPÄTOSI

2) NULL ei voi olla yhtä suuri tai epätasainen muiden arvojen kanssa

3) Jos lausekkeen arvo on NULL, lauseke itse arvioi arvon NULL lukuun ottamatta ketjutusoperaattoria (||)

12) Kuinka PL SQL -prosessi kootaan?

Kokoamisprosessi sisältää syntaksin tarkistus-, sidonta- ja p-koodin generointiprosessit.

Syntaksitarkistus tarkistaa PL SQL-koodit kokoomavirheiden varalta. Kun kaikki virheet on korjattu, data-muuttujille määritetään tallennusosoite. Sitä kutsutaan sitomiseksi. P-koodi on luettelo PL SQL -moottorin ohjeista. P-koodi tallennetaan nimettyjen lohkojen tietokantaan ja sitä käytetään seuraavan kerran, kun se suoritetaan.

13) Erota syntaksin ja ajonaikaiset virheet.

PL / SQL-kääntäjä voi helposti havaita syntaksivirheen. Esimerkiksi virheellinen oikeinkirjoitus.

Ajonaikainen virhe käsitellään PL / SQL-lohkon poikkeuksia käsittelevän osan avulla. Esimerkiksi SELECT INTO -käsky, joka ei palauta rivejä.

14) Selitä Commit, Rollback ja Savepoint.

COMMIT-lauseessa totta:

  • Muut käyttäjät voivat nähdä tapahtuman tekemät tietomuutokset.
  • Kaupalla hankitut lukot vapautetaan.
  • Kaupan tekemästä työstä tulee pysyvä.

ROLLBACK-käsky annetaan, kun tapahtuma päättyy, ja seuraava on totta.

  • Siirtymävaiheessa tehty työ perutaan ikään kuin sitä ei koskaan annettu.
  • Kaikki tapahtumalla hankitut lukot vapautetaan.

Se kumoaa kaiken käyttäjän tekemän työn tapahtumassa. SAVEPOINTin avulla vain osa tapahtumista voidaan kumota.

15) Määritä implisiittiset ja eksplisiittiset kohdistimet.

Kohdistin on oletuksena implisiittinen. Käyttäjä ei voi hallita tai käsitellä tämän kohdistimen tietoja.

Jos kysely palauttaa useita tietorivejä, ohjelma määrittää nimenomaisen kohdistimen. Tämän avulla sovellus voi käsitellä kutakin riviä peräkkäin, kun kohdistin palauttaa sen.

16) Selitä mutaatiotaulukon virhe.

Se tapahtuu, kun liipaisin yrittää päivittää nykyisen rivinsä. Se on korjattu näkymillä tai väliaikaisilla taulukoilla, joten tietokanta valitsee yhden ja päivittää toisen.

17) Milloin ilmoitusilmoitus vaaditaan?

DECLARE-käskyä käyttävät PL SQL: n anonyymit lohkot, kuten erillisissä, tallentamattomissa menettelyissä. Jos sitä käytetään, sen on oltava ensin erillisessä tiedostossa.

18) Kuinka monta laukaisinta voidaan soveltaa taulukkoon?

Yhdelle taulukolle voidaan käyttää enintään 12 laukaisinta.

19) Mikä on SQLCODE: n ja SQLERRM: n merkitys?

SQLCODE palauttaa viimeksi havaitun virheen virhemäärän arvon, kun taas SQLERRM palauttaa viimeisen virheen viestin.

20) Jos kohdistin on auki, miten löydämme PL SQL -lohkon?

% ISOPEN-kohdistimen tilamuuttujaa voidaan käyttää.

21) Näytä kaksi PL / SQL-kohdistimen poikkeusta.

Kohdistin_Jo nyt_Avaa

Invaid_cursor

22) Mitkä operaattorit käsittelevät NULLia?

NVL muuntaa NULL-arvon toiseksi määritetyksi arvoksi.

var: = NVL (var2, 'Hi');

IS NULL ja EI EI NULL voidaan käyttää tarkistaakseen nimenomaisesti, onko muuttujan arvo NULL vai ei.

23) Onko SQL * Plus: lla myös PL / SQL-moottori?

Ei, SQL * Plus -ohjelmaan ei ole upotettu PL / SQL-moottoria. Siten kaikki PL / SQL-koodi lähetetään suoraan tietokantamoottoriin. Se on paljon tehokkaampaa, koska kutakin lausetta ei poista erikseen.

24) Mitä paketteja PL SQL -kehittäjille on tarjolla?

DBMS_ pakettisarja, kuten DBMS_PIPE, DBMS_DDL, DBMS_LOCK, DBMS_ALERT, DBMS_OUTPUT, DBMS_JOB, DBMS_UTILITY, DBMS_SQL, DBMS_TRANSACTION, UTL_FILE.

25) Selitä liipaisimen 3 perusosaa.

  • Laukaiseva lause tai tapahtuma.
  • Rajoitus
  • Toiminta

26) Mitkä ovat merkkitoiminnot?

INITCAP, UPPER, SUBSTR, LOWER ja LENGTH ovat kaikki merkkitoimintoja. Ryhmäfunktiot antavat tuloksia riviryhmien perusteella, toisin kuin yksittäiset rivit. Ne ovat MAX, MIN, AVG, COUNT ja SUM.

27) Selitä TTITLE ja BTITLE.

TTITLE- ja BTITLE-komennot, jotka ohjaavat raportin otsikoita ja alatunnisteita.

28) Näytä PL / SQL: n kohdistimen määritteet.

% ISOPEN: Tarkistaa, onko kohdistin auki vai ei

% ROWCOUNT: Päivitettyjen, poistettujen tai haettujen rivien määrä.

% FOUND: Tarkistaa, onko kohdistin hakenut riviä. On totta, jos rivit haetaan

% NOT FOUND: Tarkistaa, onko kohdistin hakenut riviä. On totta, jos rivejä ei haeta.

29) Mikä on leikkauspiste?

Risteys on kahden taulukon tulo ja siinä luetellaan vain vastaavat rivit.

30) Mitä ovat sekvenssit?

Sekvenssejä käytetään järjestysnumeroiden luomiseen ilman lukituksen yläosaa. Sen haittana on, että järjestysnumero menetetään, jos tapahtuma palautetaan.

31) Kuinka viittaisit sarakkeiden arvoihin ENNEN ja JÄLKEEN, kun olet lisännyt ja poistanut laukaisimet?

Avainsanan "new.column name" avulla laukaisimet voivat viitata sarakkeiden arvoihin uuden kokoelman mukaan. Käyttämällä avainsanaa "old.column name" he voivat viitata sarakevarastoihin vanhan kokoelman mukaan.

32) Mitä SYSDATE- ja USER-avainsanoja käytetään?

SYSDATE viittaa nykyiseen palvelinjärjestelmän päivämäärään. Se on näennäinen sarake. USER on myös näennäinen sarake, mutta viittaa istuntoon kirjautuneeseen käyttäjään. Niitä käytetään taulukossa tapahtuvien muutosten seuraamiseen.

33) Kuinka ROWID auttaa suorittamaan kyselyn nopeammin?

ROWID on rivin looginen osoite, se ei ole fyysinen sarake. Se koostuu datalohkon numerosta, tiedostonumerosta ja riviluvusta datalohkossa. Siten I / O-aika minimoidaan rivin noutaminen ja tuloksena on nopeampi kysely.

34) Mihin tietokantalinkkejä käytetään?

Tietokantalinkit luodaan muodostamaan viestintää eri tietokantojen tai erilaisten ympäristöjen, kuten testaus, kehitys ja tuotanto, välillä. Tietokantalinkit ovat vain luku -tilassa myös muiden tietojen saamiseksi.

35) Mitä kohdistimen hakeminen tekee?

Kohdistimen hakeminen lukee Tulosjoukko rivi riviltä.

36) Mitä kohdistimen sulkeminen tekee?

Kohdistimen sulkeminen tyhjentää yksityisen SQL-alueen ja poistaa muistin

37) Selitä ohjaustiedoston käyttö.

Se on binaaritiedosto. Se tallentaa tietokannan rakenteen. Se sisältää useiden lokitiedostojen sijainnit, nimet ja aikaleimat. Ne voidaan tallentaa eri paikkoihin tietojen hakemisen helpottamiseksi, jos yksi tiedosto vioittuu.

38) Selitä johdonmukaisuus

Johdonmukaisuus osoittaa, että tiedot eivät heijastu muille käyttäjille, ennen kuin tiedot on sitoutunut, joten johdonmukaisuus säilyy.

39) Ero nimettömien lohkojen ja alaohjelmien välillä.

Anonyymit lohkot ovat nimettömiä lohkoja, joita ei ole tallennettu mihinkään, kun taas alaohjelmat kootaan ja tallennetaan tietokantaan. Ne kootaan ajon aikana.

40) Ero DECODE: n ja CASE: n välillä.

DECODE- ja CASE-käskyt ovat hyvin samanlaisia, mutta CASE on DECODE: n laajennettu versio. DECODE ei salli päätöksentekoa lausuntojen sijasta.

valitse dekoodaus (kokonaismäärä = 12000, 'korkea', 10000, 'keskitaso') dekoodaus_tesr: ksi smp: stä, jossa smpno on (10,12,14,16);

Tämä lause palauttaa virheen.

CASE: ta käytetään suoraan PL SQL: ssä, mutta DECODE: tä käytetään PL SQL: ssä vain SQL: n kautta.

41) Selitä itsenäinen tapahtuma.

Itsenäinen liiketoimi on pää- tai emotapahtuman itsenäinen liiketoimi. Sitä ei ole sisäkkäin, jos se aloitetaan toisella tapahtumalla.

On olemassa useita tilanteita, joissa käytetään itsenäisiä tapahtumia, kuten tapahtumien kirjaaminen ja tarkastaminen.

42) Tee ero SGA: n ja PGA: n välillä.

SGA tarkoittaa järjestelmän globaalia aluetta, kun taas PGA tarkoittaa ohjelmien tai prosessien globaalia aluetta. PGA: lle on varattu vain 10% RAM-koko, mutta SGA: lle annetaan 40% RAM-koko.

43) Mikä on Pre_defined_functions-sijainti.

Ne tallennetaan vakiopakettiin nimeltä "Toiminnot, menettelyt ja paketit"

44) Selitä polymorfismi PL SQL: ssä.

Polymorfismi on OOP: n piirre. Se on kyky luoda muuttuja, objekti tai toiminto useilla muodoilla. PL / SQL tukee polymorfismia ohjelmayksikön ylikuormittumisen muodossa jäsenfunktion tai paketin sisällä ... Yksiselitteistä logiikkaa on vältettävä ylikuormituksen aikana.

45) Mitä MERGE käyttää?

MERGE-toimintoa käytetään yhdistämään useita DML-lauseita yhdeksi.

Syntaksi: sulautu tabletenimeksi

käyttäen (kysely)

päällä (liittymisehto)

kun ei ole sovittu silloin

[lisää / päivitä / poista] -komento

kun ottelu sitten

[lisää / päivitä / poista] -komento

46) Voiko 2 kyselyä suorittaa samanaikaisesti hajautetussa tietokantajärjestelmässä?

Kyllä, ne voidaan suorittaa samanaikaisesti. Yksi kysely on aina riippumaton toisesta kyselystä hajautetussa tietokantajärjestelmässä 2-vaiheen sitoutumisen perusteella.

47) Selitä Raise_application_error.

Se on paketin DBMS_STANDARD menettely, joka sallii käyttäjän määrittelemien virhesanomien lähettämisen tietokannan liipaisimesta tai tallennetusta aliohjelmasta.

48) Mikä on out-parametri, jota käytetään eventhough-palautuslausekkeessa, voidaan käyttää myös muodossa pl / sql?

Out-parametrit sallivat useamman kuin yhden arvon kutsuvassa ohjelmassa. Out-parametria ei suositella toiminnoissa. Toimintoja voidaan käyttää toimintojen sijaan, jos vaaditaan useita arvoja. Siten näitä menettelyjä käytetään Out-parametrien suorittamiseen.

49) Kuinka muuntaisit päivämäärän Julianuksen päivämäärämuotoon?

Voimme käyttää J-muotoista merkkijonoa:

SQL> valitse to_char (to_date ('29 -Mar-2013 ',' dd-mon-yyyy '),' J ') julianiksi kaksoisviestistä;

JULIAN

50) Selitä SPOOL

Spool-komento voi tulostaa sql-käskyjen tuloksen tiedostossa.

kela / tmp / sql_outtxt

valitse smp_name, smp_id kohdasta smp, jossa dept = 'tilit';

kela pois;

51) Mainitse mistä PL / SQL-paketti koostuu?

PL / SQL-paketti koostuu

  • PL / SQL-taulukko ja tallenna TYPE-käskyt
  • Menettelyt ja toiminnot
  • Kohdistimet
  • Muuttujat (taulukot, skalaarit, tietueet jne.) Ja vakiot
  • Poikkeusten nimet ja pragmat virheen numeron liittämiseksi poikkeukseen
  • Kohdistimet

52) Mainitse mitä hyötyä PL / SQL-paketeista on?

Se tarjoaa useita etuja, kuten

  • Pakotettu tietojen piilottaminen: Se tarjoaa vapauden valita, pidetäänkö tiedot yksityisinä vai julkisina
  • Ylhäältä alas suunnitelma: Voit suunnitella käyttöliittymän paketissa olevaan koodiin ennen moduulien itse käyttöönottoa
  • Objektin pysyvyys: Pakettimäärityksessä ilmoitetut objektit käyttäytyvät kuten sovelluksen kaikkien PL / SQL-objektien globaalit tiedot. Voit muokata pakettia yhdessä moduulissa ja viitata sitten muutokset toiseen moduuliin
  • Kohdistettu suunnittelu: Paketti antaa kehittäjille vahvan pidon siitä, miten paketin sisällä olevia moduuleja ja tietorakenteita voidaan käyttää
  • Tapahtumien eheyden takaaminen: Se tarjoaa transaktioiden eheyden
  • Suorituskyvyn parantaminen: RDBMS seuraa automaattisesti kaikkien tietokantaan tallennettujen ohjelmaobjektien pätevyyttä ja parantaa pakettien suorituskykyä.

53) Mainitse mitkä ovat erilaisia ​​menetelmiä PL / SQL-koodin jäljittämiseksi?

Koodin jäljitys on tärkeä tekniikka koodin suorituskyvyn mittaamiseksi ajon aikana. Eri menetelmät jäljittämiseen sisältävät

  • DBMS_APPLICATION_INFO
  • DBMS_TRACE
  • DBMS_SESSION ja DBMS_MONITOR
  • trcsess- ja tkproof-apuohjelmat

54) Mainitse mitä hierarkkinen profiloija tekee?

Hierarkkinen profiloija voisi profiloida PL / SQL: ssä soitetut puhelut lukuun ottamatta aukkojen ja suorituskyvyn jäljityksen odotusten välistä aukkoa. Hierarkkisen profiloijan tehokkuuksiin sisältyy

  • Erillinen raportointi SQL: lle ja PL / SQL-ajankulutukselle
  • Raportit laskevat PL / SQL: ssä soitettujen erillisten alaohjelmien puhelut ja kunkin aliohjelmakutsun ajan
  • Useita interaktiivisia analyysiraportteja HTML-muodossa komentorivi-apuohjelman avulla
  • Tehokkaampi kuin perinteiset profilointilaitteet ja muut jäljitysapuohjelmat

55) Mainitse mitä PLV-viestin avulla voit tehdä?

PLV-viestin avulla voit

  • Määritä yksittäinen tekstiviesti määritetylle riville PL / SQL-taulukossa
  • Se hakee viestin tekstin numeroiden mukaan
  • Se korvaa omat viestisi automaattisesti Oracle-vakiovirheillä, joissa on rajoituskytkin
  • Eräkuormitusviestien numerot ja teksti tietokantataulukosta suoraan PLV msg PL / SQL-taulukko

56) Mainitse mitä PLV (PL / Vision) -paketti tarjoaa?

  • Nolla korvaamisarvo
  • Joukko väitemenettelyjä
  • Erilaiset apuohjelmat
  • Joukko vakioita, joita käytetään koko PL-näyssä
  • Ennalta määritetyt tietotyypit
  • 57) Mainitse mikä on PLVpr: n ja PLVprsps: n käyttö?
  • PLVprs: Se on laajennus merkkijonojen jäsentämiseen PL / SQL: lle, ja se on merkkijonojen jäsentämisen alin taso
  • PLVprsps: On korkeimman tason paketti jäsentää PL / SQL-lähdekoodia erillisiksi atomeiksi. Työn tekeminen perustuu muihin jäsentämispaketteihin.

58) Selitä, kuinka voit kopioida tiedoston tiedostosisältöön ja tiedoston PL / SQL-taulukkoon etukäteen PL / SQL?

Yhdellä ohjelmakutsulla - " fcopy procedure" - voit kopioida yhden tiedoston koko sisällön toiseen tiedostoon. Vaikka voit kopioida tiedoston sisällön suoraan PL / SQL-taulukkoon, voit käyttää ohjelmaa " file2pstab" .

59) Selitä, miten poikkeusten käsittely tapahtuu etukäteen PL / SQL?

PL / SQl: n käsittely tarjoaa poikkeuksellisen tehokkaan PLVexc-laajennuksen. PLVexc tukee neljää erilaista poikkeusten käsittelytoimintoa.

  • Jatka käsittelyä
  • Nauhoita ja jatka sitten
  • Pysäytä käsittely
  • Tallenna ja lopeta käsittely

Niille poikkeuksille, jotka toistuvat, voit käyttää RAISE-käskyä.

60) Mainitse, minkä ongelman voi kohdata kirjoittaessasi lokitietoja tietokantataulukkoon PL / SQL: ssä?

Kun kirjoitat lokitietoja tietokantataulukkoon, kohtaamasi ongelma on, että tiedot ovat käytettävissä vain, kun uudet rivit on sidottu tietokantaan. Tämä voi olla ongelma, koska sellainen PLVlog otetaan yleensä käyttöön virheiden seuraamiseksi, ja monissa tällaisissa tapauksissa nykyinen tapahtuma epäonnistuu tai muuten tarvitsee palautusta.

61) Mainitse mikä on funktio, jota käytetään siirtämään PL / SQL-taulukoloki tietokantataulukkoon?

PL / SQL- taululokin siirtämiseen käytetään tietokantalokitaulukon toimintoa "MENETTELY ps2db" .

62) Milloin sinun on käytettävä oletusarvoista "palauttamista" PLVlogin tallennuspisteeseen?

Oletusarvoista PLVlog-palautuspistettä käytetään, kun käyttäjät ovat ottaneet palautustoiminnon käyttöön eivätkä ole antaneet vaihtoehtoista tallennuspistettä put_line-kutsussa. Oletussäästöpiste alustetaan arvoon c ei vakio.

63) Miksi PLVtabia pidetään helpoin tapa käyttää PL / SQL-taulukkoa?

PL / SQL-taulukko on lähinnä PL / SQL: n taulukoita, ja tähän taulukkoon pääsemiseksi sinun on ensin ilmoitettava taulukon tyyppi ja sitten itse PL / SQL-taulukko. Mutta käyttämällä PLVtab-ohjelmaa voit välttää oman PL / SQL-taulukotyypin määrittelemisen ja tehdä PL / SQL-tietotaulukon käytöstä helppoa.

64) Mainitse, mitä PLVtab antaa sinun tehdä, kun näytät PL / SQL-taulukoiden sisältöä?

PLVtab antaa sinun tehdä seuraavat asiat, kun näytät PL / SQL-taulukoiden sisältöä

  • Näytä tai estä taulukon otsikko
  • Näytä tai estä taulukon arvojen rivinumero
  • Näytä etuliite ennen jokaista taulukon riviä

65) Selitä, miten voit tallentaa tai sijoittaa viestisi taulukkoon?

Voit tallentaa viestin taulukkoon tekemällä sen kahdella tavalla

  • Lataa yksittäiset viestit puheluilla add_text- menettelyyn
  • Lataa viestisarjat tietokantataulukosta menettelyllä load_from_dbms

66) Mainitse mikä on funktion "moduulimenettely" käyttö PL / SQL: ssä?

"Moduulimenettely" mahdollistaa kaikkien koodirivien muuntamisen tietyssä ohjelmayksikössä yhdellä menettelykutsulla. Moduuleille on kolme argumenttia

  • module_in
  • cor_in
  • Last_module_in

67) Mainitse mitä PLVcmt ja PLVrb tekee PL / SQL: ssä?

PL / Vision tarjoaa kaksi pakettia, jotka auttavat sinua hallitsemaan tapahtumien käsittelyä PL / SQL-sovelluksessa. Se on PLVcmt ja PLVrb.

  • PLVcmt: PLVcmt-paketti kiteyttää logiikan ja monimutkaisuuden käsittelemään sitoutumisprosessointia
  • PLVrb: Se tarjoaa ohjelmallisen käyttöliittymän toiminnan palauttamiseksi PL / SQL: ssä