Usługa ArcGIS Online wymaga od deweloperów korzystania ze standardowych zapytań SQL podczas wykonywania zapytań dotyczących hostowanych warstw obiektowych. Użycie standardowych funkcji zapytań SQL pomaga w zapobieganiu atakom polegającym na wprowadzaniu kodu SQL. Wszystkie aplikacje ArcGIS obsługują standardowe zapytania SQL.
Ograniczenia związane z zapytaniami standardowymi
- Korzystanie z zapytań standardowych jest konfigurowane dla całej instytucji, nie można go wyłączyć dla niektórych warstw.
- Standardowe zapytania nie są obsługiwane dla połączeń między różnymi przestrzeniami roboczymi.
- Zapytania podrzędne w postaci klauzuli WHERE, na przykład POP_2010 = (SELECT min(POP_2010) FROM counties, nie są obsługiwane.
- Zapytania usług baz danych, na przykład Microsoft Azure SQL Database, nie są obsługiwane.
Funkcje SQL, które są obsługiwane w usłudze ArcGIS Online
Jeśli jesteś deweloperem aplikacji obecnie używającym składni klauzuli WHERE specyficznej dla określonej bazy danych, musisz zaktualizować klauzule WHERE w kodzie aplikacji, tak aby zastosowana została standardowa składnia SQL obsługiwana w usłudze ArcGIS Online. Poniższe tabele zawierają obsługiwane funkcje SQL oraz składnię każdej z nich. Gdy następujące funkcje i składnie są używane w Twoich aplikacjach, usługa ArcGIS Online przekształca je, aby były zgodne z wymogami bazy danych używanej przez warstwę obiektową.
Funkcje daty
Funkcja | Opis |
---|---|
CURRENT_DATE() | Zwraca bieżącą datę jako czas UTC. Wyświetlana wartość zależy od używanego klienta. W usłudze ArcGIS Online daty są wyświetlane zgodnie ze strefą czasową danej instytucji lub profilu. |
CURRENT_TIME() | Zwraca datę i czas w formacie UTC (w godzinach, minutach i sekundach). Wyświetlana wartość zależy od używanego klienta. W usłudze ArcGIS Online czas jest wyświetlany jako czas lokalny danej instytucji lub profilu. |
CURRENT_TIMESTAMP() | Zwraca datę i czas w formacie UTC (w godzinach, minutach, sekundach i milisekundach). Wyświetlana wartość zależy od używanego klienta. W usłudze ArcGIS Online czas jest wyświetlany jako czas lokalny danej instytucji lub profilu. |
EXTRACT(<unit> FROM <date>) | Zwraca jedną część (<unit>) podanej wartości <date>. Możliwe wartości <unit> to na przykład year, month, day, hour i minute. W poniższych przykładach wyodrębniane są różne jednostki z wartość daty i godziny 21.12.2016 15:11:
|
Funkcje liczbowe
Funkcje ciągów znakowych
Funkcja | Opis |
---|---|
CAST(<string> AS DATE | TIME) | Przekształca ciąg znakowy na datę lub czas, jeśli wartość ciągu znakowego jest w obsługiwanym formacie. Jeśli ciąg znakowy jest w formacie 'MM/DD/RRRR hh:mm:ss' lub 'RRRR-MM-DD', można przekształcić go w datę. Jeśli ciąg znakowy jest w formacie 'HH:MM:SS', można przekształcić go w typ danych obsługujący tylko czas (TIME). Na przykład następujący ciąg znakowy można przekształcić w datę: CAST('1988-05-30' AS DATE) |
CHAR_LENGTH(<string>) | Zwraca liczbę znaków w podanym ciągu znakowym. Wynik ma postać liczby całkowitej. Na przykład następująca instrukcja zwraca wartość 8: CHAR_LENGTH('Redlands') |
CONCAT(<string1>, <string2>) | Łączy dwie wartości ciągu znakowego. Można podać tylko dwa ciągi. Aby połączyć więcej niż dwa ciągi znakowe, należy zagnieździć kilka funkcji CONCAT, jak przedstawiono poniżej. W pierwszym przykładzie poniżej łączone są litery A i B. W drugim przykładzie przedstawiono zagnieżdżoną funkcję CONCAT, która łączy trzy wartości znakowe: A, : i B.
Wartości puste są przekształcane do pustych ciągów znakowych. |
CURRENT_USER | Gdy w zapytaniu jest zawarta funkcja CURRENT_USER., działa ona podobnie do zmiennej; nazwa użytkownika uzyskującego dostęp do hostowanej warstwy obiektowej lub widoku hostowanej warstwy obiektowej jest identyfikowana i używana w zapytaniu. Jeśli na przykład użytkownik planner3 jest użytkownikiem zalogowanym w instytucji, aby uzyskać dostęp do widoku hostowanej warstwy obiektowej zawierającego następującą definicję zapytania, tylko obiekty, dla których pole staffmember zawiera wartość planner3, są zwracane do użytkownika nawiązującego połączenie: staffmember=current_user W następnym przykładzie w polu staffmember jest przechowywane wiele wartości. Następująca klauzula where powoduje znalezienie nazwy bieżącego użytkownika w wartości tekstowej w polu staffmember, nawet jeśli w tym polu przechowywane jest wiele nazw użytkowników: where=position(current_user in staffmember)>0 |
POSITION(<substring>, <string>) | Zwraca pozycję pierwszego wystąpienia podanego podciągu w podanym ciągu znakowym. Jeżeli podany podciąg nie zostanie znaleziony, wynik wynosi 0. W pierwszym przykładzie poniżej wynikiem jest 5, ponieważ pierwsza litera (b) podciągu (boat) jest piątą literą w ciągu znakowym (Sailboat). W drugim przykładzie wynikiem jest 0, ponieważ podciąg (motor) nie występuje w ciągu znakowym.
|
SUBSTRING(<string>, <start>, <length>) | Zwraca część wartości ciągu znakowego; <start> to indeks liczby całkowitej określający, gdzie rozpoczynają się zwracane znaki, a <length> jest liczbą zwracanych znaków. Zobacz następujące przykłady:
|
TRIM(BOTH | LEADING | TRAILING ' ' FROM <string>) | Zwraca ciąg znakowy, który jest podanym ciągiem z usuniętymi wszystkimi spacjami początkowymi i końcowymi. W poniższym przykładzie przed i po ciągu znakowym San Bernardino znajduje się spacja. Słowo kluczowe BOTH jest używane do usuwania ciągu spacji (wskazywanego za pomocą dwóch pojedynczych cudzysłowów ze spacją między nimi) na początku i końcu ciągu tekstowego: TRIM(BOTH ' ' FROM ' San Bernardino ') Zwracany jest ciąg znakowy 'San Bernardino'. |
UPPER(<string>) | Zwraca ciąg znakowy, w którym wszystkie znaki są zapisane wielkimi literami. W tym przykładzie wszystkie litery w ciągu znakowym Sailboat są przekształcane w wielkie litery, czego wynikiem jest ciąg znakowy 'SAILBOAT': UPPER('Sailboat') |
LOWER(<string>) | Zwraca ciąg znakowy, w którym wszystkie znaki są zapisane małymi literami. W następnym przykładzie zwracany jest ciąg znakowy 'sailboat': LOWER('Sailboat') |